抽象类是java中实现代码骨架与扩展机制的核心工具,通过抽象方法定义扩展点、具体方法构建稳定骨架、构造器和protected成员支撑子类初始化,并可用final方法锁定关键流程。

抽象类在 Java 中是实现代码骨架与扩展机制的核心工具,它既定义了通用结构,又保留了子类定制的空间。
用抽象方法定义扩展点
抽象类通过声明抽象方法,强制子类提供具体实现,从而把可变逻辑“留空”,形成清晰的扩展契约。
- 抽象方法不写方法体,只声明签名,子类必须重写(除非子类也声明为 abstract)
- 例如:public abstract void process(); 表示“每个子类都得自己决定怎么处理”
- 多个抽象方法可组合成一套行为协议,如 validate()、execute()、rollback()
用具体方法构建稳定骨架
抽象类中可以包含已实现的方法,封装不变逻辑,构成可复用的执行流程,子类无需重复编写。
- 比如模板方法模式:一个 execute() 方法调用 prepare() → doWork() → cleanup()
- 其中 prepare() 和 cleanup() 是具体方法,保障基础准备和收尾;doWork() 是抽象方法,由子类填充
- 这样既保证流程统一,又允许核心步骤差异化
用构造器和成员变量支撑子类初始化
抽象类可定义构造器、字段和 protected 方法,为子类提供共享状态和初始化能力。
- 构造器虽不能直接 new,但子类构造器第一行会隐式或显式调用 super(),完成共用初始化
- protected 字段或方法让子类安全访问内部状态,比如记录日志开关、配置参数、缓存容器等
- 避免把所有字段设为 public,也不推荐全用 private + getter/setter,protected 是更自然的继承协作方式
结合 final 方法防止关键逻辑被覆盖
当某段流程绝对不能被子类修改时,用 final 修饰具体方法,强化骨架的稳定性。
- 例如:final void run() { before(); doTask(); after(); }
- 子类能重写 before() 和 after()(如果它们是 abstract 或 protected),但无法绕过整体控制流
- 这比靠文档约定更可靠,是编译期强制的扩展边界
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











