final修饰类时禁止继承,修饰方法时禁止重写,修饰变量时仅保证引用不可变;三者均在编译期强制限制,分别用于保障安全性、行为稳定性和不可变性设计。
final修饰类时,禁止被继承
用final修饰一个类,表示该类不能被其他类继承。这不是语法警告,而是编译期强制限制——一旦尝试extends它,Javac直接报错:error: cannot inherit from final class。
典型场景是工具类(如java.lang.Math)或安全敏感类(如java.lang.String),防止子类篡改行为逻辑。
- 不能有
abstract和final共存的类,因为抽象类本意就是被继承 - 类被
final修饰后,其所有方法自动具备“不可覆写”语义,无需再单独加final - 注意:内部类可以是
final,但匿名内部类默认就是final(即使没写),无法显式继承它
final修饰方法时,禁止被子类重写
在非final类中,用final修饰某个方法,意味着子类不能@Override它。这和C++的final语义一致,不是运行时防护,而是编译期锁定。
常见用途是模板方法模式中的钩子方法,或者性能关键路径上防止意外覆写引入副作用。
立即学习“Java免费学习笔记(深入)”;