java继承通过extends实现单继承,子类自动获得父类非私有成员但不继承构造器;private成员不可访问,需getter/setter;object是隐式父类,重写equals/hashcode/tostring需遵守契约;非is-a关系应优先组合而非继承。

Java 中继承通过 extends 关键字 建立父子类关系,使子类自动获得父类的非私有成员(字段、方法),从而实现对象特征的逐层传递。这种传递不是复制,而是“共享定义 + 隐式拥有”,核心在于编译期和运行时的语义继承机制。
继承让子类对象天然具备父类特征
只要子类声明 class Sub extends Super,子类实例就具备父类定义的所有可访问行为和状态能力:
- 子类对象能直接调用父类的
public和protected方法,无需重写或额外声明; - 子类对象可访问父类的非私有字段(如
protected int age),也可通过父类提供的 getter/setter 间接使用private字段; - 所有 Java 类默认继承
Object,所以每个对象都自带toString()、equals()、hashCode()等基础行为。
特征传递依赖构造链与内存结构
对象创建时,特征传递体现在初始化过程和内存布局中:
- 子类构造器第一行默认或显式调用
super(...),确保父类字段先被初始化; - JVM 在堆中为子类对象分配连续内存空间,前段存放从父类继承的字段(按继承顺序排列),后段存放子类新增字段;
- 方法调用遵循动态绑定:若子类未重写某方法,JVM 自动沿继承链向上查找并执行父类版本。
多层继承延续特征传递链条
继承具有传递性,特征可跨多代延续:
- 若
C extends B且B extends A,则C实例同时拥有A和B的非私有成员; - 即使
A中某个方法在B中被重写,C仍可通过super显式调用B版本,或直接继承A中未被覆盖的方法; - 接口实现不参与特征传递,但可与继承共存(
class D extends C implements X, Y),补充行为契约而非状态。
限制与边界保障传递的合理性
Java 用规则防止特征滥用,确保传递清晰可控:
-
private成员不会被继承,子类无法直接访问,必须通过父类公开方法间接操作; - 构造器不被继承,但子类必须调用父类构造器,保证父类状态正确初始化;
- 单继承避免歧义,确保每条特征传递路径唯一,避免菱形继承导致的“重复继承”问题。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











