直接在class前加final可彻底禁止继承,编译器会在子类extends时立即报错;final类如paymentvalidator无法被继承,其方法自动隐式final,适用于安全敏感类、不可变值对象和纯工具类。

直接在 class 关键字前加 final,就能彻底阻止继承。编译器会在子类尝试 extends 时立即报错,连编译都通不过。
修饰类的写法和效果
语法非常简单:
public final class PaymentValidator {
public void validate() { /* 核心校验逻辑 */ }
}
此时任何继承行为都会失败:
class EvilValidator extends PaymentValidator { } // 编译错误:Cannot inherit from final 'PaymentValidator'
一旦类被声明为 final,它就成为继承链的终点——没有子类能存在,自然也不存在方法重写、构造器调用或字段覆盖的可能。
哪些类适合加 final
-
安全敏感类:如
TokenVerifier、SignatureChecker,防止恶意子类绕过关键校验 -
不可变值对象:如
OrderId、Money,避免子类篡改equals或hashCode破坏一致性 -
纯工具类:如
JsonUtils、CryptoHelper,本身只提供静态方法,不应被实例化或扩展
常见误区与注意事项
-
final类中的方法自动隐式final,显式再加final会编译报错 - 不能和
abstract同时使用——语义冲突,抽象类本为被继承而设计 - 构造器不能用
final修饰(语法非法),且应避免protected构造器,推荐private或包私有 - 文档说明或
private构造器无法替代final的防护力,只有final能在编译期和 JVM 层面强制拦截
对比其他控制方式
比起仅靠约定或注释,final 是唯一能在编译期切断继承路径的手段。虽然 Java 17+ 提供了 sealed 类作为更精细的替代方案,但若目标是“完全禁止继承”,final 仍是最直接、最可靠的选择。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











