Java抽象类通过“模板方法+强制抽象+共享状态”规范子类:用final模板方法固化流程,abstract方法强制实现差异逻辑,protected/final字段约束初始化,并配合接口明确能力边界。

Java 抽象类规范子类实现框架,核心是用“模板方法 + 强制抽象 + 共享状态”三者协同,让子类在统一骨架下只专注差异逻辑。
用模板方法固化流程骨架
在抽象类中定义 final 方法作为主流程入口,内部调用若干可定制步骤,其中关键步骤声明为 abstract,强制子类实现。
- 例如:public final void execute() { init(); validate(); doWork(); cleanup(); },其中 doWork() 是 abstract 方法
- 子类无法重写 execute(),但必须提供自己的 doWork() 实现
- init()、validate()、cleanup() 可以是具体方法,提供默认逻辑,子类可选择性重写(用 protected 修饰)
用抽象方法划定行为边界
每个 abstract 方法代表子类必须回答的一个设计问题,签名要语义清晰,Javadoc 明确约束意图。
- 方法名用动宾短语,如 buildRequest()、parseResponse()、getTimeoutMs()
- 禁止使用模糊命名如 handle() 或 process(),避免子类理解偏差
- Javadoc 写清楚“为什么必须实现”,比如:/** 返回请求超时毫秒数,必须大于 0 */
用构造器与字段约束初始化和状态
抽象类可含构造方法和 protected/final 字段,确保子类从创建起就满足基础约束。
立即学习“Java免费学习笔记(深入)”;
- 定义带参构造器,强制传入必要依赖,如 protected AbstractHttpClient(HttpClient client, Config config)
- 用 protected final String baseUrl; 保存不可变共享配置,子类可读不可改
- 避免在抽象类中设 public 字段或空参构造器,防止子类绕过初始化校验
配合接口明确能力切片
抽象类负责“怎么接入”,接口负责“能做什么”,二者组合提升架构表达力。
- 具体类写成 class AlipayClient extends AbstractPaymentClient implements AsyncCapable, Retryable
- AsyncCapable 接口声明 CompletableFuture<Result> asyncPay(...),不涉及 HTTP 细节
- 抽象父类已封装线程池、回调包装等通用异步逻辑,子类只需专注协议转换


















