Java继承复用父类代码的核心是子类自动继承非私有成员并结合super调用父类构造器或方法:public/protected成员可直接访问,包级成员同包可访问,private不被继承;子类构造器须显式调用super(参数...)确保父类初始化;重写方法中可用super.方法名()扩展父类逻辑;需遵守访问权限与设计意图,优先组合而非继承。

Java 中继承复用父类代码,核心是通过 子类自动获得父类的非私有成员(字段、方法),再结合 super 关键字显式调用父类构造器或方法,实现安全、可控的代码复用。
继承自动复用非私有成员
只要父类成员不是 private 修饰,子类就能直接访问:
- public 和 protected 成员:子类中可直接使用,无需额外操作
- 默认(包级)访问权限的成员:在同一个包内,子类也能直接访问
- private 成员不会被继承,子类无法访问,也不能复用
例如:父类定义 protected String name; 和 public void sayHello() { ... },子类中可直接写 name = "Alice"; sayHello();
用 super 调用父类构造器
子类构造器默认第一行会隐式调用 super()(无参父类构造器)。若父类没有无参构造器,必须显式调用:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在子类构造器首行写 super(参数...),匹配父类某个构造器
- 否则编译报错:“constructor X in class Y cannot be applied to given types”
这样能确保父类状态被正确初始化,是复用父类初始化逻辑的关键步骤。
用 super 调用被重写的父类方法
当子类重写了父类方法,仍可通过 super.方法名() 显式调用原始实现:
- 常用于“扩展而非替换”场景,比如子类先执行父类逻辑,再追加自己的行为
- 避免重复编写父类已有功能,提升可维护性
例如:public void run() { super.run(); System.out.println("running faster"); }
注意访问权限与设计意图
复用不是万能的,要尊重父类的设计边界:
- private 方法无法被继承,也不应强行绕过——说明它属于父类内部实现细节
- final 方法可被继承但不能重写,复用时需接受其固定行为
- 组合优于继承:如果只是需要某类的功能,而非“is-a”关系,优先考虑把父类作为字段引用

















