子类能复用父类中public、protected及同包下的default成员,private成员不可继承;调用时可直接使用或通过super显式调用父类版本,构造器须用super()调用,静态成员不参与多态。

Java 中继承通过 extends 关键字让子类直接获得父类的非私有成员变量和方法,实现代码复用。关键在于访问权限控制和继承的可见性规则——只有 public、protected 和同包下的 default(包级) 成员才能被子类访问并复用。
哪些成员能被子类复用?
子类能复用父类中满足访问修饰符要求的成员:
- public 成员:任何包下都可访问,子类无条件复用;
- protected 成员:不同包中子类也能访问,常用于设计模板方法或钩子方法;
- default(包内默认)成员:仅当子类与父类在同一个包时才可复用;
- private 成员:不能被继承,子类无法直接访问或复用(但可通过 public/protected 方法间接使用)。
如何正确调用父类成员?
子类中可以直接使用父类复用过来的成员变量和方法,无需额外声明:
- 普通调用:
this.fieldName或methodName()即可访问继承来的字段和方法; - 显式调用父类版本:
super.fieldName或super.methodName(),适用于重写后仍需父类逻辑的场景; - 构造器中必须用
super(...)显式调用父类构造器(若父类无无参构造器且子类未定义构造器,编译会报错)。
复用时要注意的常见问题
看似简单,但容易踩坑:
- 子类不能继承父类的 构造器,但可通过
super()复用其初始化逻辑; - 成员变量即使被复用,也不是共享内存——子类和父类各自拥有独立副本(字段不覆盖,只是同名遮蔽);
- 方法复用依赖运行时动态绑定:若子类重写了某方法,调用时执行的是子类版本;想强制调用父类版本,必须用
super.method(); - 静态成员(static 字段/方法)可被继承,但不参与多态,调用取决于引用类型而非实际对象类型。
一个典型复用示例
假设父类 Animal 定义了 protected String name 和 public void eat(),子类 Dog 继承它:
-
Dog可直接访问name并调用eat(); - 可在
Dog中新增特有行为(如bark()),同时复用父类通用能力; - 若重写
eat(),仍可用super.eat()先执行父类逻辑,再添加狗特有的进食细节。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











