最终 class 和 Java 中的潜在后果
A final class and underlying consequences in Java
我在某处听到这句话,我无法忘记它:
"All members of a final class are implicitly final."
现在,我很清楚这三个著名的概念:
- A
final
class 无法扩展。
final
变量一旦初始化就不能重新赋值。
- 无法覆盖
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
还是隐式或显式并不重要。
我在某处听到这句话,我无法忘记它:
"All members of a final class are implicitly final."
现在,我很清楚这三个著名的概念:
- A
final
class 无法扩展。 final
变量一旦初始化就不能重新赋值。- 无法覆盖
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
还是隐式或显式并不重要。