抽象类在Java中通过提供具体方法实现代码复用与行为定制:定义非abstract方法供子类直接继承调用(如breath()),支持super调用与扩展;结合abstract方法构成模板方法模式(如performDailyRoutine调用抽象的makeSound());封装工具逻辑与共享状态(如protected计数器);利用构造器执行公共初始化(如设置默认名称、加载配置)。

抽象类在 Java 中通过定义具体方法(非 abstract 方法)来提供部分实现代码,让子类直接复用,同时保留一些方法由子类决定具体行为。
定义具体方法供子类直接继承使用
抽象类中可以像普通类一样编写完整的方法体,这些方法默认被子类继承,无需重写就能调用。
- 例如:一个抽象类 Animal 可以包含
breath()这样的通用逻辑,所有子类(如 Dog、Bird)自动获得该能力 - 子类可通过
super.methodName()显式调用父类的具体方法,也可在其基础上扩展
组合抽象方法与具体方法形成模板结构
抽象类常将固定流程写成具体方法,把可变环节声明为 abstract 方法,构成“模板方法模式”。
- 比如
makeSound()是抽象的,但performDailyRoutine()可以是具体方法:先wakeUp(),再makeSound(),最后sleep() - 其中
wakeUp()和sleep()是具体实现,makeSound()交由子类实现——这样既统一流程,又保留灵活性
提供默认工具方法或共享状态
抽象类可封装常用工具逻辑(如日志、校验、计数器),或定义 protected 字段供子类访问。
立即学习“Java免费学习笔记(深入)”;
- 例如定义
protected int idCounter = 0;和protected int nextId() { return ++idCounter; },子类创建实例时可直接调用分配唯一 ID - 避免每个子类重复编写相同辅助逻辑,提升代码复用性和一致性
注意构造器与初始化逻辑的复用
抽象类的构造器虽不能直接 new,但子类构造时会隐式或显式调用它,可用于执行公共初始化操作。
- 比如在抽象类构造器中设置默认名称、注册监听器、加载配置等
- 子类通过
super(...)触发父类构造逻辑,确保基础状态始终被正确建立


















