最终 class 和 Java 中的潜在后果

A final class and underlying consequences in Java

我在某处听到这句话,我无法忘记它:

"All members of a final class are implicitly final."

现在,我很清楚这三个著名的概念:

  1. A final class 无法扩展。
  2. final 变量一旦初始化就不能重新赋值。
  3. 无法覆盖 final 方法。

但是,如果 final class 的所有成员(变量、方法)都是隐式 final,那么我们就有一个 final class AND final 变量和 final 方法。

那么,StringBuilder 怎么可能允许它的内容发生变化呢?!

A class 可以是最终的,但可变的。

class 是 final 只意味着不能有子 classes,但没有说明 class.

的行为

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

class 和 class 成员的最终性无关。

该断言过于简单化,因此是错误的。只有 方法 final class 可以隐含地考虑 final。然而,这个事实本身是无关紧要的,因为 final class 的方法不能被覆盖,因为不能有任何子 class 。它们是 final 还是隐式或显式并不重要。