abstract关键字声明抽象类,不可实例化,用于约束子类结构和提供通用行为框架;含抽象方法(无实现)和具体方法(有实现),子类须实现抽象方法并可复用具体方法。

abstract 关键字用于声明抽象类,它本身不能被实例化,主要作用是为子类提供统一的结构约束和通用行为框架。抽象类可包含抽象方法(无实现)和具体方法(有实现),子类必须实现所有抽象方法,同时可直接继承使用具体方法。
抽象类的基本声明方式
使用 abstract 修饰类,表示该类为抽象类;若类中含抽象方法,则该类必须声明为 abstract:
- 抽象类用 abstract class ClassName { ... } 声明
- 抽象方法只有声明,没有方法体,以分号结尾:abstract void doSomething();
- 抽象方法不能是 private、static 或 final(与多态和继承机制冲突)
通过抽象类规范子类通用行为
抽象类把“变”与“不变”分离:不变的部分(如公共逻辑、默认实现)写在具体方法中;变化的部分(如不同子类的具体处理逻辑)定义为抽象方法,强制子类实现:
- 例如定义 abstract class Animal,其中 makeSound() 是抽象方法,sleep() 是具体方法
- 子类 Dog 和 Cat 必须重写 makeSound(),但可直接调用继承来的 sleep()
- 这样既保证了行为一致性(所有动物都会 sleep),又保留了灵活性(每种动物叫声不同)
注意事项与常见误区
抽象类不是接口,设计时需注意语义合理性与继承关系的清晰性:
- 抽象类体现“is-a”关系(如 Dog is an Animal),不适合用于跨类型能力组合(此时应选接口)
- 一个类只能继承一个抽象类,但可实现多个接口,避免过度依赖抽象类导致扩展受限
- 抽象类的构造方法可以存在,用于初始化共用字段,由子类构造器通过 super() 调用
配合模板方法模式提升复用性
在抽象类中定义算法骨架(模板方法),将可变步骤声明为抽象方法,让子类定制细节:
- 例如 abstract void prepare();、abstract void cook();、abstract void serve();
- 具体方法 final void makeDish() { prepare(); cook(); serve(); } 封装流程
- 子类只需实现三个抽象步骤,无法修改整体流程顺序,保障核心逻辑稳定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











