抽象类在java中通过抽象方法定义统一接口契约,强制子类实现;提供非抽象方法封装共用流程(模板方法模式);支持构造器与protected字段统一初始化;结合多态实现运行时动态调度,符合开闭原则。

抽象类在 Java 中通过定义公共方法签名和部分实现,为子类提供统一的访问入口。它不直接实例化,而是作为模板约束所有子类必须遵循相同的接口契约,同时允许共享通用逻辑。
定义抽象方法作为统一入口点
抽象类中声明的抽象方法强制子类实现,从而确保调用方能以一致方式调用不同子类的同名方法。
- 例如定义 abstract void process(),所有子类都必须提供自己的 process() 实现
- 外部代码只需面向抽象类类型编程:Processor p = new ConcreteProcessor(); p.process();
- 无需关心具体子类类型,调用逻辑完全解耦
提供非抽象方法封装共用流程
抽象类可在抽象方法前后添加具体方法,形成“模板方法模式”,控制执行顺序并复用基础逻辑。
- 如 public final void execute() { before(); doWork(); after(); },其中 doWork() 是抽象方法
- 子类只重写 doWork(),不必重复编写前置校验或后置清理
- 调用方始终通过 execute() 入口进入,行为结构统一
利用构造器与字段统一初始化逻辑
抽象类可声明 protected 字段、定义构造器,并在其中完成通用初始化,保证子类对象创建时具备一致状态基础。
- 例如在抽象类构造器中设置日志器、配置参数或校验必要依赖
- 子类通过 super(...) 显式调用,确保初始化链完整
- 避免每个子类重复编写相同初始化代码,降低出错风险
配合多态实现运行时统一调度
抽象类引用指向不同子类实例,JVM 根据实际类型动态绑定方法,使同一入口触发差异化行为。
- 集合中存放抽象类类型的对象:List
shapes = Arrays.asList(new Circle(), new Rectangle()); - 遍历调用 shape.draw(),自动分发到对应子类实现
- 新增子类无需修改原有调用代码,符合开闭原则
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











