final类不能被继承,final方法不能被子类重写;前者彻底封闭继承链以保障稳定性,如String、Integer等;后者允许继承但禁止重写,用于保护关键逻辑或支持JVM优化。

final 类不能被继承,final 方法不能被子类重写——这是 Java 继承机制中两条明确的访问控制规则,核心目的是保障类设计的稳定性和方法行为的不可变性。
final 类:彻底封闭继承链
用 final 修饰的类无法作为父类被其他类继承。编译器会在声明 extends FinalClass 时直接报错。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
- 常见典型:Java 标准库中的
String、Integer、Math等都是 final 类,防止被恶意扩展或破坏其不可变契约 - 适用场景:工具类(无状态、仅提供静态方法)、安全敏感类、已完全封装且不期望行为被改变的核心类
- 注意:final 类中的成员变量是否为 final 是独立问题;final 类可以包含非 final 方法,只是这些方法无法被重写(因为根本无法有子类)
final 方法:允许继承但禁止重写
在非 final 类中,用 final 修饰的方法可以被子类继承(即子类对象能调用),但不允许被重写(override)。
- 编译器会拒绝子类中出现同名、同参数、同返回类型的非 final 方法声明
- 常用于:父类已实现关键逻辑(如模板方法模式中的钩子方法)、性能敏感方法(JVM 可能内联优化)、防止子类破坏约定(如
Object.hashCode()在某些自定义类中被设为 final 以保证一致性) - 与 private 方法区别:private 方法不可见、不可继承;final 方法可见、可继承、不可重写
常见误区澄清
- final 类可以继承其他类(只要父类不是 final),只是它自己不能被继承
- final 方法可以被重载(overload),只是不能被重写(override)——重载发生在同一类中,与继承无关
- 构造方法不能用 final 修饰(语法错误),因为构造方法本身就不参与继承和重写
- 接口中的方法默认是 public abstract,不能加 final;接口中允许定义 static 或 default 方法,其中 static 方法天然不可重写,default 方法可被重写,但若显式加 final 会编译失败(接口中不允许 final 实例方法)

















