C# sealed 与 Java final

标签 c# java sealed

有人能告诉我以下使用sealed 不能编译的原因吗?然而,如果我将 sealed 替换为 final 并将其编译为 Java,它就可以工作。

private sealed int compInt = 100;
public bool check(int someInt)
{
    if (someInt > compInt)
    {
        return true;
    }
    return false;
}

最佳答案

那是因为 final 在 Java 中意味着很多不同的东西,这取决于你在哪里使用它,而 sealed 在 C# 中适用于类和继承虚拟成员(方法、属性、事件)。

在 Java 中 final 可以应用于:

  • classes,表示该类不能被继承。这相当于 C# 的 sealed
  • methods,这意味着该方法不能在派生类中被重写。这是 C# 中的默认设置,除非您将方法声明为 virtual 并且在派生类中,可以再次使用 sealed 阻止进一步的派生类。这就是为什么您在 C# 中看到 sealed 成员比在 Java 中看到 final 成员少很多。
  • 字段变量,这意味着它们只能被初始化一次。对于字段,C# 中的等效项是 readonly

关于C# sealed 与 Java final,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10170633/

相关文章:

c# - 密封类中没有主体的虚拟方法

Scala json4s 密封特征作为枚举

java - mockito 与密封包装

c# - 有没有一种稳定的方法可以在 Android 设备上获取电话号码?

java - 如何在 web.xml 文件中写入动态数据?

c# - Azure 文件存储 云文件

java - 检查文件扩展名是否为 .txt 的程序

java - 为什么在Java中设计单例模式时需要双重检查锁?

c# - 页面加载的 PrincipalPermission

c# - 强制 MS 图表控件在步进轴时不使用小数