final 类有哪些特点?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
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 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。