如何通过final关键字确保类核心业务逻辑不被子类继承?

2026-04-29 09:132阅读0评论SEO教程
  • 内容介绍
  • 相关推荐

本文共计665个文字,预计阅读时间需要3分钟。

如何通过final关键字确保类核心业务逻辑不被子类继承?

在Java中,使用`final`关键字修饰的类不能被继承。因此,如果你尝试创建一个继承自`final class PaymentService`的子类,如`class FraudPaymentService extends PaymentService`,编译器将会报错:

哪些类适合声明为 final

核心判断标准是:该类的实现是否必须保持完整、不可拆解、不可定制化。常见场景包括:

  • StringInteger 等 JDK 不可变类——防止子类篡改 hash 计算或序列化行为
  • 涉及密钥派生、签名验签的 SecurityUtils 类——避免子类注入弱算法或跳过校验
  • 支付网关封装类(如 AlipayClient),其请求构造、签名逻辑、回调验签流程必须原子执行
  • 配置加载器(如 YamlConfigLoader),若允许继承,子类可能覆盖 load() 方法返回伪造配置

final 类中方法无需再加 final

因为类本身不可继承,所有实例方法天然无法被重写。额外给方法加 final 是冗余的,且会干扰 IDE 的重构提示(比如重命名时误判为“受保护方法”)。

阅读全文

本文共计665个文字,预计阅读时间需要3分钟。

如何通过final关键字确保类核心业务逻辑不被子类继承?

在Java中,使用`final`关键字修饰的类不能被继承。因此,如果你尝试创建一个继承自`final class PaymentService`的子类,如`class FraudPaymentService extends PaymentService`,编译器将会报错:

哪些类适合声明为 final

核心判断标准是:该类的实现是否必须保持完整、不可拆解、不可定制化。常见场景包括:

  • StringInteger 等 JDK 不可变类——防止子类篡改 hash 计算或序列化行为
  • 涉及密钥派生、签名验签的 SecurityUtils 类——避免子类注入弱算法或跳过校验
  • 支付网关封装类(如 AlipayClient),其请求构造、签名逻辑、回调验签流程必须原子执行
  • 配置加载器(如 YamlConfigLoader),若允许继承,子类可能覆盖 load() 方法返回伪造配置

final 类中方法无需再加 final

因为类本身不可继承,所有实例方法天然无法被重写。额外给方法加 final 是冗余的,且会干扰 IDE 的重构提示(比如重命名时误判为“受保护方法”)。

阅读全文