Java继承通过extends实现代码复用,子类自动获得父类非私有成员;合理设计父类共性逻辑,用protected控制可继承范围,配合super构造器链和模板方法模式提升复用性;但“is-a”关系才适用继承,“has-a”应优先组合。

Java 中继承通过子类自动获得父类的属性和方法,实现代码复用——关键在于合理设计父类,把共性逻辑上提到父类,子类只需专注差异化部分。
用 extends 声明继承关系
子类用 extends 关键字继承父类,就能直接访问父类中非私有的成员(public、protected,以及同包下的默认访问权限成员)。
- 父类定义通用行为,比如
Animal类中的eat()、sleep() - 子类如
Dog和Cat继承后无需重写这些方法,直接调用即可 - 私有成员(
private)不能被继承,但可通过protected或公共 getter/setter 间接使用
复用不等于照搬:用 protected 控制可继承范围
父类中适合被子类复用但又不希望对外公开的字段或方法,应声明为 protected。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 例如:
protected String name;允许子类直接访问,避免每个子类都定义一遍名称字段 - 比
public更安全,比private更利于复用 - 配合构造器链(
super(...)),让子类初始化时复用父类的初始化逻辑
方法复用与定制:用 模板方法模式 配合继承
父类定义骨架方法(final),把可变部分留给子类重写,既保证流程统一,又支持灵活扩展。
立即学习“Java免费学习笔记(深入)”;
- 父类中:
final void makeCoffee() { boilWater(); brew(); pour(); addCondiments(); } - 其中
brew()和addCondiments()设为abstract或空实现,由子类覆盖 - 新增一种咖啡类型?只需新增一个子类,不用改动原有流程代码
注意复用的边界:组合有时比继承更合适
继承适用于“is-a”关系(如 Car 是一种 Vehicle),但若只是“has-a”或行为借用,优先考虑组合。
- 例如:
Engine不该继承Car,而应作为Car的成员变量 - 过度继承会导致类层次臃肿、耦合变高,修改父类可能意外影响多个子类
- 复用目标是减少重复,不是堆砌继承深度

















