Java继承通过extends实现,复用父类字段和方法,需注意访问控制、重写规则及构造过程;字段仅继承非private成员,方法可重写但static为隐藏,构造器须显式调用super,设计上优先组合而非继承。

Java 中的继承通过 extends 关键字实现,既能复用父类的数据(字段),也能复用行为(方法),但需注意访问控制、重写规则和构造过程等关键细节。
字段继承:可访问性决定能否直接使用
子类会继承父类的 非私有字段(public、protected、包内默认访问权限的字段),但不能继承 private 字段。虽然 private 字段不被直接继承,若父类提供了公共的 getter/setter 方法,子类仍可通过这些方法间接访问。
- 推荐将字段设为
private,通过受控的 getter/setter 暴露访问逻辑 - 避免在子类中定义与父类同名字段(易引发遮蔽,而非覆盖)
- 字段本身不参与多态,访问哪个字段取决于变量的编译时类型
方法继承与重写:行为复用与定制的核心机制
子类自动继承父类的非私有、非 final 方法。若需修改行为,可用 @Override 注解重写方法——这要求方法签名(名称、参数列表、返回类型协变)、访问权限不更严格,且不能降低异常范围。
- 重写只适用于实例方法;
static方法是隐藏(hiding),不是重写 - 构造器不会被继承,子类必须显式调用
super(...)初始化父类状态 -
final方法不可重写,适合封装关键逻辑
构造过程:隐式或显式调用父类构造器
每个子类构造器第一行默认或显式调用父类构造器(super() 或 super(...))。若父类无无参构造器,子类必须显式调用带参的父类构造器,否则编译失败。
立即学习“Java免费学习笔记(深入)”;
- 父类构造器负责初始化父类字段,子类构造器在此之后初始化自身字段
- 不要在父类构造器中调用可能被子类重写的实例方法(可能导致未初始化状态被访问)
- 建议在父类构造器中仅做必要且安全的初始化,避免复杂逻辑或回调
设计建议:优先组合,谨慎继承
继承表达的是“is-a”关系,应确保子类确实是父类的一种。过度继承易导致脆弱基类问题(父类修改影响所有子类)和紧耦合。
- 当只需复用功能而非类型关系时,优先考虑组合(has-a)+ 接口
- 抽象类适合定义共用状态与部分实现;接口更适合定义契约与多实现能力
- 用
final类防止意外继承,提升安全性与可维护性


















