抽象类在Java中通过封装共性行为(如模板逻辑、默认实现、共享字段)实现部分复用,不可实例化;可混合声明抽象方法(子类必须重写)和具体方法(直接复用),支持模板方法模式(final流程+抽象步骤)、protected字段与构造器初始化,并与接口default方法互补使用。

抽象类在 Java 中通过定义通用方法和强制子类实现特定逻辑,实现部分代码复用。它本身不能被实例化,但可以封装共性行为(如模板逻辑、默认实现、共享字段),让子类专注差异化部分。
定义抽象方法 + 提供具体方法
抽象类可混合声明抽象方法(无实现,由子类重写)和具体方法(已有实现,直接复用):
- 抽象方法用 abstract 修饰,不带方法体,子类必须 @Override
- 具体方法正常编写,子类继承后可直接调用,无需重写
- 例如:一个消息处理器抽象类可定义 process() 为模板方法(具体),而 parseData() 和 sendResult() 为抽象方法(由不同子类实现)
使用模板方法模式控制流程
把稳定不变的执行流程写在抽象类的具体方法中,把可变环节设为抽象或钩子方法:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 模板方法通常用 final 修饰,防止子类篡改流程顺序
- 子类只负责实现步骤细节,不改变整体结构
- 例如:public final void execute() { init(); doWork(); cleanup(); },其中 doWork() 是抽象方法
共享字段与构造器初始化
抽象类可声明 protected 字段和构造器,供子类统一访问和初始化:
立即学习“Java免费学习笔记(深入)”;
- 字段设为 protected,子类可直接使用,避免重复定义连接池、配置对象等
- 抽象类构造器在子类创建时自动调用(通过 super()),适合做公共初始化(如日志器、校验器设置)
- 注意:抽象类构造器不能用于创建实例,仅用于子类初始化链
配合 default 方法(接口补充)更灵活
虽然接口不能有字段和构造器,但从 Java 8 起,default 方法 可提供默认实现,常与抽象类互补:
- 当需要多继承行为(如多个能力组合)时,用接口 + default 方法
- 当需要共享状态(字段)、构造逻辑或复杂模板流程时,优先用抽象类
- 实际项目中常见组合:抽象类提供核心骨架,接口定义扩展能力(如 Runnable、Comparable)

















