子类通过extends继承父类非private成员,public和protected成员跨包可继承,默认成员限同包继承,private成员不可继承;继承成员可直接使用,同名字段用super访问父类;构造器不继承但需super()调用父类初始化;重写方法可用super.调用父类逻辑。

子类通过 extends 关键字声明继承关系后,会自动获得父类的非私有成员——无需额外代码,编译器直接支持。
哪些成员能被继承
子类能继承的,仅限于父类中非 private 的字段和方法,具体取决于访问修饰符和包位置:
- public 成员:任何包下的子类都能继承并直接使用
- protected 成员:不同包的子类也能继承;同一包内还支持包内其他类访问
- 默认(包级) 成员:只有与父类在同一个包中的子类才能继承
- private 成员:完全不参与继承,子类中既看不到、也不能访问,编译时报错
如何在子类中使用继承来的成员
继承后,这些成员就像子类自己定义的一样,可直接调用或赋值:
- 直接使用字段名,例如 name、age(前提是它们是 protected 或 public)
- 直接调用方法,例如 sayHello()、run()
- 若父子类存在同名字段,遵循“就近原则”:优先访问子类自己的,需访问父类的可用 super.name
构造器不能继承,但必须协同初始化
父类构造器不会被继承,但子类对象创建时,父类部分必须先初始化:
立即学习“Java免费学习笔记(深入)”;
- 子类构造器第一行默认隐式调用 super()(无参父类构造器)
- 如果父类只有带参构造器,子类必须显式写 super(参数),否则编译失败
- 这是确保父类字段(如 name、id)被正确赋值的关键步骤
重写方法时复用父类逻辑
当子类重写(@Override)某个方法,又想保留父类原有行为时,可用 super.方法名() 显式调用:
- 适合“扩展而非替换”的场景,比如先执行父类的 save(),再记录日志
- 注意:只能用于被重写的方法;super 不能调用父类 private 方法
- 访问权限不能比父类更严格,例如父类是 protected,子类重写后不能改为 private


















