C#密封vs Java决赛

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

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

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

在Java final中可以应用于:

  • ,这意味着该类不能被inheritance。 这相当于C#的sealed
  • 方法 ,这意味着无法在派生类中重写该方法。 这是C#中的默认值,除非您将方法声明为virtual并且在派生类中,可以防止再次使用sealed其他派生类。
  • 字段变量 ,这意味着它们只能初始化一次。 对于字段,C#中的等效字段是readonly

C# Sealed只能应用于引用类型 ,并且对inheritance树有影响。

在实践中,标记为sealed的类型保证是inheritance树中的最后一个“叶子”,或者简而言之,您不能从声明为sealed的类型派生。

 public sealed class Child : Base { } public class AnotherAgain : Child //THIS IS NOT ALLOWED { } 

它不能应用于成员。

当乔伊有点不正确时,提格兰的回答并没有错。
首先,您可以查看此页面: 在C#中,Java的最终结果是什么? 。
sealed关键字可以应用于classinstance methodproperty但不能应用于变量或接口的方法。 sealed类不能inheritance。 sealed放置方法时,必须由公司override 。 每个struct都是sealed ,因此不能inheritancestruct 。 检查此图片: 密封使用