Java子类通过extends继承父类非私有成员,需注意访问权限、super构造调用、@Override重写复用及private/static/final等限制。

Java 中子类通过继承(extends)自动获得父类的非私有属性和方法,无需额外操作即可复用。关键在于访问权限控制和构造过程的配合。
继承后可直接使用的成员
子类继承父类时,以下成员默认可直接访问:
- 被 public 或 protected 修饰的字段和方法(无论是否在同一包)
- 默认访问权限(即不加修饰符)的字段和方法,但仅限于同一包内
- 注意:private 成员不会被继承,子类无法直接访问,但可通过 public/protected 的 getter/setter 或其他公开方法间接使用
调用父类构造方法
子类对象初始化时,必须先完成父类部分的构造。Java 要求子类构造器第一行隐式或显式调用 super(...):
- 若父类有无参构造器且子类构造器未写 super(),编译器自动插入 super()
- 若父类没有无参构造器,子类必须显式调用 super(参数),否则编译失败
- 例如:super(name, age); 可将子类构造参数传递给父类初始化逻辑
重写与复用并存的方法
子类可通过 @Override 重写父类方法,在新逻辑中仍可调用父类版本实现复用:
- 使用 super.方法名() 显式调用父类被重写的方法
- 适合“在父类行为基础上扩展”场景,比如日志记录、参数校验、前后处理等
- 示例:super.save(); 在子类 save() 中先执行父类保存逻辑,再添加缓存更新
避免常见误区
复用不是无条件的,需注意几个典型问题:
- 子类不能继承父类的 private 成员,也不能继承 构造器(但可调用)
- 静态成员(static)属于类本身,子类“继承”后实际是共享同一份,不是每个子类实例独有
- 如果父类方法被声明为 final,子类无法重写,但依然可以调用
- 子类中定义了与父类同名字段,会造成“字段隐藏”,而非覆盖——建议避免,容易引发混淆
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











