java中子类复用父类逻辑应优先用protected方法封装+模板方法模式,谨慎使用super调用,必要时以组合替代继承。

在 Java 中,子类复用父类的公共业务逻辑,核心是合理利用继承机制和访问控制,并配合设计原则避免紧耦合。关键不在于“能不能调用”,而在于“怎么调用得安全、清晰、可维护”。
用 protected 或 public 方法封装公共逻辑
父类中将可复用的业务逻辑抽成独立方法,并设为 protected(推荐)或 public。这样子类既能直接调用,又不会暴露给无关类。
- 避免把逻辑写在构造器或私有方法里——子类无法访问
- 不要在父类方法里硬编码子类特有行为,否则会破坏开闭原则
- 例如:父类
OrderService提供protected void validateOrder(Order order),子类在自己createSpecialOrder()中直接调用
通过模板方法模式控制流程骨架
父类定义算法骨架(final 方法),把可变部分延迟到子类实现。这是复用逻辑 + 允许定制的黄金组合。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 父类写好
final void process() { validate(); doCore(); notify(); } - 其中
validate()和notify()是 protected abstract 或有默认实现 - 子类只需重写钩子方法,不用重复主流程,也不用担心漏掉关键步骤
谨慎使用 super 调用父类方法
当子类需要扩展而非替换父类逻辑时(比如“先做父类校验,再加额外检查”),用 super.methodName() 显式复用。
- 重写方法开头或结尾调用
super.xxx(),保持父类契约 - 避免在子类中复制粘贴父类代码——一旦父类逻辑变更,子类容易遗漏
- 注意:不能在构造器中调用
super()以外的实例方法(可能引发未初始化问题)
优先考虑组合而非继承来复用逻辑
如果公共逻辑与父类的“is-a”关系不强,或未来可能被多个无关类使用,用组合更灵活。
- 把公共逻辑提取为独立服务类(如
ValidationHelper、IdGenerator) - 子类持有一个该类的实例,通过委托调用,而不是继承
- 好处:解耦、易测试、支持运行时替换(比如换不同策略)、避免继承层级过深
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










