子类复用父类逻辑的核心是减少重复、统一维护、提升可读性;通过继承非私有成员、重写时调用super、抽象方法+模板方法分离变与不变,以及合理设计父类边界来实现。

子类复用父类逻辑,核心是减少重复、统一维护、提升可读性。不是简单“抄代码”,而是通过继承机制让共性稳定、个性清晰。
直接继承非私有成员,省去重复定义
父类中已有的 public 或 protected 字段和方法,子类无需再写一遍,声明 extends 后就能直接用。
- 比如多个业务实体都有
id、createTime、updateTime,统一放在BaseEntity中,所有子类自动拥有 - 通用工具方法如
validate()、toJsonString()放在父类里,子类调用this.validate()即可,不用每个类都重写校验规则 - 注意:
private成员不会被继承,但可通过public/protected的 getter/setter 间接使用
重写时用 super 调用父逻辑,避免遗漏共性
当子类需要定制行为,又不能丢掉父类原有逻辑时,重写方法里显式加 super.xxx() 是关键。
- 例如重写
save():先执行父类的参数校验和日志记录(super.save()),再做子类特有的缓存更新 - 重写
toString()时漏掉super.toString(),会导致父类字段信息丢失,排查问题时难定位 -
@Override注解不只是装饰,它能在编译期检查签名是否匹配,防止误写成重载
抽象方法 + 模板方法,把变与不变分离
父类用抽象方法留出扩展点,用普通方法封装固定流程,子类只专注差异部分。
- 比如
processOrder()在父类中写好“校验→扣库存→发消息→更新状态”主干,其中deductInventory()设为abstract,由OnlineOrder和OfflineOrder分别实现 - 这样既复用了 80% 流程,又保证各子类行为可控,新增订单类型只需写一个新类,不改已有逻辑
- 比纯继承更进一步,也比全靠重写更安全——父类能强制子类实现必要环节
合理设计父类边界,防止过度复用反拖累
不是所有共性都该往上提。复用的前提是语义合理、变化频率一致。
- 只提取真正通用的:像
id、createBy、createTime这类几乎所有实体都有的字段 - 避免把“部分子类才用”的方法塞进父类,否则其他子类要么空实现,要么违背里氏替换原则
- 如果复用需求不稳定(比如某字段后期只在两个类中需要),优先考虑组合(has-a)而非继承(is-a)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











