最直接有效的方式是用final关键字修饰父类方法;还可将整个类声明为final、用private或static方法替代、或采用组合代替继承。

最直接有效的方式是用 final 关键字修饰父类方法。
用 final 修饰方法
在父类中将方法声明为 public final void doWork(),子类就无法重写它。编译器会在编译阶段报错,例如:
Cannot override the final method from Parent- 哪怕子类写了同名同参的方法,也不会构成重写,而是独立定义(若签名相同则直接编译失败)
- 该方法仍可被子类继承并调用,只是实现不可变
把整个类声明为 final
如果父类所有行为都应固定、不允许任何定制,可直接将类设为 final:
public final class ServiceHelper { ... }- 子类无法
extends它,自然不存在重写问题 - 适合工具类、核心算法封装类或不可变模型类(如
String)
用 private 或 static 方法替代
某些逻辑本就不该暴露给子类,可从设计源头规避重写需求:
- 把方法设为
private:子类根本看不见,谈不上重写(注意:此时也不是继承) - 用
static方法:属于类级别,不参与多态,子类同名方法只是隐藏(hiding),不是重写 - 若需复用又防重写,可组合使用:
public static final或private final
用组合代替继承
当重写本身就成了风险源,可以考虑重构设计:
- 让子类持有父类对象作为成员变量,通过委托调用其方法
- 避免继承带来的行为耦合,父类方法是否被重写不再影响子类逻辑
- 更灵活,也更容易做单元测试和替换实现
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











