Java中用extends实现继承的核心目的是将子类重复的字段、方法和逻辑上移到父类统一维护,以减少重复代码、提升可读性和修改效率;需从重复代码识别共性、合理声明继承、谨慎重写差异逻辑,并警惕非is-a关系的滥用继承。

Java中用extends关键字实现继承,核心目的是把多个子类重复的字段、方法和逻辑,上移到父类统一维护——不是为了“套一层类”,而是为减少复制粘贴、提升可读性和后续修改效率。
一、从重复代码出发识别父类共性
先别急着写class Animal extends ...。打开你的项目,找两个以上相似的类(比如Student、Teacher、Admin),逐行对比:哪些字段名、类型、初始值都一样?哪些方法签名(名称+参数+返回值)和实现几乎雷同?这些就是可提取的共性。
- 典型共性字段:id、name、createdAt、status(状态码或枚举)
-
典型共性方法:
getId()、getName()、isValid()、toString()基础模板 -
注意避开假共性:比如都叫
code,但一个是学号、一个是工号、一个是订单号——语义不同,不应强行合并
二、用extends声明继承并迁移共性代码
新建父类(如BaseUser),把识别出的共性字段和方法写进去;子类用extends BaseUser声明继承关系。Java会自动让子类获得父类的public和protected成员。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 父类中字段建议设为
protected(子类可直接访问)或提供getter/setter(更安全) - 构造方法不被继承,需在子类构造器中用
super(...)显式调用父类构造器 - 若父类只有无参构造器,子类构造器可省略
super()(编译器自动插入)
class BaseUser {<br>
protected long id;<br>
protected String name;<br>
public BaseUser(long id, String name) { this.id = id; this.name = name; }<br>
}<br>
class Student extends BaseUser {<br>
private String major;<br>
public Student(long id, String name, String major) {<br>
super(id, name); // 必须第一行<br>
this.major = major;<br>
}<br>
}
三、合理使用重写(@Override)处理差异逻辑
共性上提,差异保留。当子类需要对某个共性方法做不同实现时,用@Override重写它。不要删掉父类方法再各自重写——那等于放弃继承价值。
立即学习“Java免费学习笔记(深入)”;
- 重写方法签名必须与父类完全一致(包括返回类型、方法名、参数列表)
- 可在子类重写方法中调用
super.xxx()复用父类逻辑,再叠加自己的处理 - 避免在父类方法里写大量
if (this instanceof Student)分支——这是继承滥用,应交给多态
四、警惕继承陷阱:不是所有“像”都该继承
继承表达的是is-a关系(学生是一种用户),不是看起来有相似字段。以下情况优先考虑组合或接口:
- 两个类只是某些字段名相同,但业务含义和生命周期完全不同
- 子类需要频繁屏蔽或空实现父类方法(说明设计违背里氏替换原则)
- 未来可能要支持多重身份(如一个对象既是学生又是助教)——继承无法解决,接口更适合

















