java继承通过extends实现代码复用,子类天然拥有父类的protected字段和通用方法;一个子类仅能单继承一个非final父类,构造器首行默认调用super();子类可添加特有成员、重写父类方法(@override),并用super调用父类逻辑;需避免为少量复用强行继承、父类构造器调用可重写方法等误区。

Java 中通过继承实现代码复用,核心不是复制粘贴,而是让子类“天然拥有”父类的通用能力——只要合理设计父类,子类就能少写、不写重复代码,还能保持逻辑清晰、易于维护。
把共性抽出来,定义在父类里
多个类之间如果存在相同属性(如 name、age)或相同行为(如 eat()、sleep()),就说明它们有共性。这时不要在每个类里都写一遍,而是新建一个更上层的类作为父类。
- 例如:Cat、Dog、Bird 都是动物,都有名字、年龄、吃饭、睡觉行为 → 抽出 Animal 类作为父类
- 字段统一定义在父类中(推荐用 protected 修饰,既允许子类直接访问,又限制外部随意修改)
- 通用方法也写在父类里,子类继承后可直接调用,无需重写
用 extends 建立继承关系
子类通过 extends 关键字声明继承父类,语法简单,但有明确约束:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 一个子类只能有一个直接父类(Java 是单继承)
- 父类不能是 final 类,否则无法被继承
- 父类的 private 成员不会被继承,但可通过 public/protected 的 getter/setter 间接使用
- 子类构造器第一行默认或显式调用 super(),确保父类部分正确初始化
子类专注差异化,复用+扩展两不误
继承不是为了完全照搬,而是为了在复用基础上做精准增强:
- 添加子类特有字段和方法:比如 Dog 新增 breed 字段、bark() 方法;Cat 新增 isIndoor 属性、meow() 方法
- 重写(override)父类方法:用 @Override 注解 + 相同签名,让 Dog.eat() 吃骨头、Cat.eat() 吃鱼,接口一致、行为不同
- 需要时调用父类逻辑:在重写方法中用 super.eat() 先执行通用动作,再追加子类专属处理
避免常见误区,让复用真正落地
继承用不好反而增加复杂度,几个关键点要注意:
- 别为复用一两个方法就强行继承 —— 优先考虑组合(has-a)或静态工具类
- 父类构造器里别调用可能被重写的方法 —— 子类字段还没初始化,容易空指针
- 重写了 equals() 就必须同步重写 hashCode(),否则影响集合使用
- static、final、private 方法不能被重写,重写只针对实例方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










