Java继承实现代码复用需满足is-a关系,子类通过extends单继承父类非私有成员;可重写方法、调用super初始化、配合抽象类与模板方法提升复用质量。

Java 中通过继承实现代码复用,核心是让子类自动获得父类的非私有成员(字段和方法),避免重复编写相同逻辑。关键不在于“能继承”,而在于“该不该继承”——必须满足 is-a 关系(比如“狗是一种动物”),否则容易设计失当。
用 extends 声明继承关系
子类通过 extends 关键字继承父类,只能单继承(一个类只能有一个直接父类):
- 父类的 public 和 protected 成员可直接被子类访问;
- 默认(包级)访问权限的成员,在同一包内也可继承使用;
- private 成员不会被继承,但可通过 protected/public 方法间接访问。
重写(Override)父类方法以定制行为
子类可在保持方法签名一致的前提下,用 @Override 注解重写父类方法,复用原有结构的同时修改具体实现:
- 重写时不能降低访问权限(如父类是 public,子类不能改成 protected);
- 可借助 super.方法名() 在子类中调用父类原逻辑,实现“在父类基础上扩展”;
- 例如:父类
Animal.eat()打印“进食”,子类Dog.eat()先调用super.eat(),再追加“啃骨头”。
利用构造器链初始化共用状态
子类构造器默认第一行会隐式调用 super()(无参父构造器)。若父类没有无参构造器,子类必须显式用 super(...) 调用合适的父构造器:
立即学习“Java免费学习笔记(深入)”;
- 确保父类字段(如 name、age)在子类对象创建时就被正确初始化;
- 避免在子类中重复声明和赋值本该由父类统一管理的状态;
- 这是复用“对象构建逻辑”的重要一环,不是语法细节,而是设计责任划分。
配合抽象类和模板方法提升复用质量
当多个子类有相同执行流程但部分步骤不同,可用 抽象类 + 模板方法模式:
- 抽象类定义通用骨架方法(如
makeCoffee()),调用若干 abstract 或 hook 方法; - 子类只实现差异部分(如
brew()、addCondiments()),无需关心整体流程; - 既保证结构统一,又避免子类误改关键步骤,比简单继承更安全、更易维护。


















