子类通过extends继承父类非private成员:public/protected成员可直接访问,default成员同包可访问,private和构造方法不被继承,static成员可调用但非实例继承;变量访问遵循就近原则;方法可重写但需满足签名一致、访问权限不更严格等条件。

子类通过 extends 关键字继承父类,自动获得父类中所有非 private的成员变量和方法。不需要额外声明或复制代码,只要访问权限允许,就能直接使用。
哪些成员能被继承
子类继承的是父类中可访问的非私有成员:
- public 和 protected 成员:子类中可直接访问(无论是否在同一包)
- 默认(包级)访问权限的成员:仅当子类与父类在同一个包内时可访问
- private 成员:不被继承,子类无法访问,哪怕通过 this 或 super 也不行
- static 成员:属于类本身,可被继承并直接通过子类名调用(如
Child.staticVar),但不是“实例继承” - 构造方法:不被继承,但子类构造器必须显式或隐式调用
super()来初始化父类部分
成员变量访问规则:就近原则
当子类和父类存在同名变量时,访问行为取决于当前作用域中最近定义的那个:
- 直接写
name→ 优先使用子类自己的变量(如果定义了) - 想明确访问父类变量 → 必须写
super.name - 若子类没定义该变量,则自动向上查找父类,直到找到或报错
成员方法继承与重写
子类继承父类的非 private 方法后,可以直接调用;如需修改行为,可进行重写(Override):
- 方法签名(名称 + 参数列表)必须完全一致
- 返回类型可以是父类返回类型的子类(协变返回)
- 访问修饰符不能比父类更严格(如父类是 protected,子类不能是 private)
- 不能重写 private、final 或 static 方法
- 建议加上
@Override注解,便于编译器检查和团队协作
构造过程中的继承体现
虽然构造方法不被继承,但子类对象创建时,JVM 会强制完成父类初始化:
- 每个子类构造器第一行,默认插入
super();(调用父类无参构造) - 若父类没有无参构造,子类必须显式调用
super(…),否则编译失败 - 初始化顺序固定:父类静态 → 子类静态 → 父类实例变量 → 父类构造 → 子类实例变量 → 子类构造
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











