抽象类通过abstract方法强制子类实现规范,子类必须重写所有抽象方法,否则编译不通过;可含具体方法与构造器,支持模板方法设计,适用于需共享状态或部分实现的类族。

在 Java 中,抽象类通过 抽象方法 强制子类实现规范——子类必须重写所有抽象方法,否则编译不通过。
用 abstract 修饰方法定义契约
抽象类中用 abstract 关键字声明的方法没有方法体,只规定方法签名(名称、参数、返回类型、异常),相当于给子类立下“必须实现”的契约。
- 抽象方法不能是 private、static 或 final(它们与“被子类覆盖”冲突)
- 抽象类可以同时包含抽象方法和具体方法(提供通用逻辑)
- 子类继承抽象类后,若不实现全部抽象方法,自身也必须声明为 abstract
子类必须重写抽象方法(否则编译失败)
非抽象子类继承抽象类时,编译器会强制检查:所有继承来的抽象方法是否都被重写。未实现则报错。
- 重写时方法名、参数列表、返回类型(或协变返回类型)必须匹配
- 访问权限不能比父类抽象方法更严格(如父类是 protected,子类不能是 private)
- 示例:抽象类定义 public abstract void save();,子类必须提供 public void save() { ... }
结合构造器与模板方法提升规范性
抽象类可定义 final 模板方法,调用若干抽象方法,把流程骨架固定下来,把变化点留给子类实现。
- 例如:final void process() { validate(); doWork(); cleanup(); }
- 其中 validate() 和 doWork() 是抽象方法,子类必须定制
- 这样既保证执行顺序统一,又强制子类填充关键行为
抽象类 vs 接口:选对场景
如果规范侧重“能做什么”(行为契约),优先用接口;如果还需共享状态、部分实现或构造逻辑,抽象类更合适。
- 抽象类支持字段、构造器、静态方法、默认方法,适合有共性基础的类族
- 一个类只能继承一个抽象类,但可实现多个接口——设计时需权衡扩展性
- Java 8+ 接口可含 default/static 方法,但无法定义实例字段或构造器
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











