java继承通过子类自动获得父类非私有成员,减少代码冗余;共性逻辑提至父类(如vehicle),子类专注差异化;配合多态实现统一调用,避免重复模板代码;但需遵循is-a关系,避免滥用。

Java 继承通过让子类自动获得父类的非私有成员,避免在多个类中重复定义相同字段和方法,从而直接削减冗余代码量。
把共性逻辑提到父类里
当多个类(比如 Car、Truck、Motorcycle)都有品牌、型号、启动、停止等通用行为时,不要各自写一遍。而是抽出一个 Vehicle 父类,把 brand、model、start()、stop() 放进去。所有子类只需 extends Vehicle,就天然拥有了这些能力。
- 公共字段(
public或protected)可直接访问 - 公共方法可直接调用,无需重写
- 后续修改启动逻辑,只改
Vehicle.start()一处即可生效于全部子类
子类专注差异化,不重复造轮子
继承不是复制粘贴,而是“已有基础 + 个性补充”。子类不用再写初始化品牌、校验型号长度等通用逻辑,只处理自己独有的部分:
-
Car可以增加openSunroof() -
Truck可以添加loadCargo(int weight) -
Motorcycle可以覆盖start()—— 比如去掉“插入钥匙”步骤,改成“一键启动”
这样每个类的代码量变小,职责更清晰,也不容易因某处漏改导致逻辑不一致。
配合多态,统一调用,进一步压缩模板代码
有了继承,就能用父类类型接收不同子类对象,实现“一份调用,多种执行”:
- 写一个方法
void operate(Vehicle v) { v.start(); v.stop(); } - 传入
new Car()、new Truck()都能运行,且各自执行自己版本的start() - 新增
Bus类?只要继承Vehicle并实现必要逻辑,原有operate()完全不用动
这比为每种车型单独写 operateCar()、operateTruck() 等方法,省去了大量结构雷同的调用代码。
注意边界:别为了继承而继承
继承有效,但滥用会适得其反:
- 仅当子类确实是父类的一种(is-a 关系),比如“狗是动物”,才适合继承;“车有引擎”是 has-a,该用组合
- 父类不应塞满所有可能用到的方法,否则子类被迫继承无用功能,反而增加理解负担
- 私有成员不会被真正“继承”——子类看不到,只能靠
protected或公有 getter/setter 暴露必要接口
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











