Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

final 类有哪些特点?

查看完整题解

参考回答

直接回答

final 类不能被继承,适合明确禁止子类改变类型行为的设计。它可以有字段、构造器、普通方法,也可以实现接口。final 类与不可变类不是同一个概念:如果内部状态仍可通过方法修改,它仍然是可变对象。

讲清原理

禁止继承能够关闭一种扩展途径,但不会自动冻结字段,更不会让任意操作线程安全。final 修饰字段时也只限制赋值次数;一个 final 引用仍可能指向可变列表。

普通类不能同时写 abstract 与 final,因为前者允许留下需要子类完成的行为,而后者禁止建立子类。是否使用 final 应取决于扩展契约,不需要为了某种未经测量的性能收益到处添加它。

例子与易错点

final class Counter {
    private int value;
    void increment() { value++; }
    int value() { return value; }
}
Counter counter = new Counter();
counter.increment();
System.out.println(counter.value()); // 1

Counter 不能被继承,但实例状态确实改变了。String 是 final 且具有不可变语义,后者还依靠其 API 和内部状态保护;不能只看到 final 就推导出“对象永远不会变化”。

相关题:第 11 题、第 25 题、第 50 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。