Java继承通过extends实现单继承,子类复用父类非私有成员,支持重写与多态;构造器不继承但默认调用父类无参构造器;static、private、final方法不可重写;应遵循“is-a”关系,否则优先组合或接口。

Java中通过extends关键字实现继承,子类可复用父类的非私有成员,并支持方法重写与多态。核心是“单继承、多层继承、不支持多重继承”。
继承的基本语法与规则
使用class 子类名 extends 父类名声明继承关系。父类不能是final类,子类不能继承父类的private成员(但可通过protected或公有方法间接访问)。构造器不会被继承,但子类构造器默认会调用父类无参构造器(可通过super()显式调用)。
- 一个类只能直接继承一个父类(Java不支持多重继承)
- 所有类默认继承
java.lang.Object,即使未显式声明 -
static、private、final方法不能被重写(但可被重载)
方法重写(Override)的关键要点
子类提供与父类同名、同参数列表、同返回类型(或协变返回类型)的方法,即为重写。需满足:@Override注解推荐使用(编译期检查)、访问权限不能更严格(如父类protected,子类不能改为private)、不能抛出比父类更宽泛的检查型异常。
- 重写关注运行时类型,是实现多态的基础
- 若需在子类方法中调用父类同名方法,用
super.方法名() - 静态方法被“隐藏”而非重写:调用取决于引用类型,不是实际对象类型
继承中的构造器调用链
创建子类对象时,JVM会自上而下初始化继承链上的所有类。子类构造器第一行默认为super();(调用父类无参构造器)。若父类没有无参构造器,子类必须显式调用super(…),且必须是构造器首句。
立即学习“Java免费学习笔记(深入)”;
- 若父类只定义了带参构造器,子类必须显式调用,否则编译失败
- 可在构造器中用
this(...)调用本类其他构造器,但不能与super(...)共存 - 字段初始化顺序:父类字段 → 父类构造器 → 子类字段 → 子类构造器
何时不该用继承?替代方案建议
继承表示“is-a”关系,语义必须合理。若仅为代码复用,优先考虑组合(has-a)或接口实现。例如:Dog extends Animal合理;Car extends Engine不合理(应是组合关系)。
- 过度继承导致类层次臃肿、维护困难,违反开闭原则
- 接口(
interface)更适合定义行为契约,支持多实现 - 组合+委托更灵活:将功能封装为独立类,通过成员变量引入










