Java中的最终类和潜在后果

时间:2015-01-17 10:24:42

标签: java stringbuilder final

我在某个地方听到了这句话,我无法理解:

“决赛班的所有成员都是隐含的最终成员。”

现在,我非常清楚这三个着名概念:

  1. 无法扩展final课程。
  2. 初始化后,无法使用新值重新分配final变量。
  3. 无法覆盖final方法。
  4. 但是,如果最终类的所有成员(变量,方法)都是隐式最终的,那么我们就有一个最终的类AND最终变量和最终方法。

    那么,StringBuilder尽管是最终的,但是如何允许其内容改变?!

2 个答案:

答案 0 :(得分:2)

该断言过于简单,因此是错误的。只有final类的方法才能被隐式地视为final。然而,这个事实在其中是无关紧要的,因为final类的方法不能被覆盖,因为它不能是任何子类。如果他们是final或不是隐式或明确的,那么这并不重要。

答案 1 :(得分:1)

课程可以是最终的,但可变。

最后的类只意味着没有子类,但对类的行为一无所知。

相反,字段和方法可以是final(和实例immutable),但是类不是最终的。

班级和班级成员的完整性是无关的。