【发布时间】:2011-01-05 08:32:39
【问题描述】:
在 Java 中,final 不仅仅适用于一个类。
所以,我想知道:这两个关键字在功能上有什么区别吗?
谢谢,对于一个相对菜鸟的问题,我们深表歉意。
快速的 Google 搜索无法满足我的需求。
【问题讨论】:
-
你为什么不简单地比较一下文档?
-
RTFM,嗯。好吧,让我们和平关闭这个Q。谢谢你们!我必须选择一个答案作为接受。
在 Java 中,final 不仅仅适用于一个类。
所以,我想知道:这两个关键字在功能上有什么区别吗?
谢谢,对于一个相对菜鸟的问题,我们深表歉意。
快速的 Google 搜索无法满足我的需求。
【问题讨论】:
Java 的 final 关键字等效于 C# 的 sealed、readonly 和 sealed 关键字。
这三个中的两个在 Java 和 C# 中有些不同:
在 Java 中,方法默认是虚拟的,所以任何方法都可以声明为final 以防止它被覆盖。在 C# 中,方法默认不是虚拟的,因此唯一被覆盖的方法可以声明为sealed(以防止它们被进一步覆盖)
在 Java 中,任何变量或字段都可以声明为final,以防止在初始化后对其进行更改(并且,对于字段,在构造函数之外)。在 C# 中,可以将字段声明为 readonly,以获得完全相同的效果,但局部变量不能。请注意,Java 没有等效于 C# 的 const 关键字。 (C# 中的consts 是在编译时评估的,值是硬编码的,而不是被引用)
对于类,C# 的 sealed 类和 Java 的 final 类完全相同 (AFAIK)。
【讨论】:
sealed 关键字有两种不同的用法。在VB中,它们是NotInheritable和NotOverridable
sealed 是一个具有多种上下文含义的关键字(与许多关键字一样,包括final、default、using 等)。 C# const 用于 Java 使用 static final 的许多地方;因此,我认为它应该列为等价物之一。
const不 等同于 static final。
private static final int MY_NUMBER = 3 这样的Java 常量(这当然很常见),我相信private const int MY_NUMBER = 0; 是到C# 的最佳映射;当然,您不能将静态与 C# 常量一起使用。所以const 最接近static final 的一些用法。
【讨论】: