再看final关键字

final类 final 修饰类, 限制了该类的扩展性, 即禁止继承. 其中的好处可以用String的不可变性来举例
String不可变的好处/为什么定义成不可变的? 首先不可变性可以从两个方面来讲:
1. 内部char数组不可变: 这样带来的好处是, 天生线程安全, 可缓存hashCode值(适合用到Set, Map等非重复容器中), 安全性保证, 即外部引用不会影响一个带有String参数的方法的执行结果.
2. final Class: 限制继承. 这保证了 1. 中的正确性.
试想, 如果String可继承, 则某个声明为String类型的引用可能指向某个String子类, 子类可能会恶意复写一些方法 (如hashCode, equals), 这样, 使用者使用这个String引用的对象时, 就不能有 1中的保证, 结果不可预测.
final 方法 【再看final关键字】表达的语义是, 被final修饰的方法是通用的, 不能够被复写
final 变量 修饰常量, 对于field来说, final常量必须在构造器执行结束之前被赋值(显式赋值)
好处见1

    推荐阅读