final修饰类可彻底禁止继承,如string、integer等工具类;修饰方法则允许继承但禁止重写,用于保护核心逻辑,且final不影响重载,仅限制override。

博查AI搜索
一款AI工具,主要用于博查是一个无广告干扰的答案引擎,国内首个多模型AI搜索引擎,适合需要提升相关任务效率的用户。
下载
用 final 修饰类或方法,是 Java 中实现“不可继承”和“不可重写”的最直接、最明确的方式。
H3 用 final 修饰类:彻底禁止继承
p 当一个类被声明为
final,它就不能被任何其他类继承。编译器会在你写
class Sub extends FinalClass 时直接报错,连编译都通不过。
p 这种设计常用于工具类(如
String、
Integer)、安全敏感类或已完全封装、无需扩展的类。
p 写法很简单:
final class Utils { ... }
public final class ConfigLoader { ... }
H3 用 final 修饰方法:禁止子类重写
p final 方法可以被继承,但不能被子类覆盖(override)。哪怕子类写了同名、同参数、同返回类型的方法,编译器也会拒绝。
p 它适合那些逻辑已定、不希望被误改的核心行为,比如模板方法模式中的钩子方法之外的关键步骤,或涉及线程安全、校验逻辑的方法。
p 注意:final 方法不能是
private(因为 private 方法本身就不能被继承,加 final 没意义,编译器会警告);也不能是构造方法(构造器本来就不可继承/重写)。
p 示例:
public final String getId() { return this.id; }
protected final void validate() { ... }
H3 补充说明:final 不影响重载,也不影响内部类访问
p final 方法仍可被重载(overload),只要参数列表不同即可。禁止的是重写(override)。
p 被 final 修饰的类中,其内部类、静态方法、实例字段等照常可用;只是外部无法继承该类,也无法覆盖其 final 方法。
p 如果一个类是 final 的,它里面的所有方法天然“无法被重写”,但显式加 final 是一种清晰的契约表达,也防止后续有人把类改成非 final 后意外破坏方法语义。
H3 实际建议
- 优先考虑设计意图:不是所有类都需要 final,过度使用会降低可扩展性;但关键基础类(如值对象、核心工具类)建议尽早设为 final。
- 对已有类加 final 前,确认没有子类存在——否则编译失败,可能影响依赖方。
- IDE(如 IntelliJ)支持一键将类或方法标记为 final,并自动检查潜在继承链,推荐开启相关 inspection。