我正在比较Java和C#中的访问修饰符。我想在Java中找到C#的protected internal
的替代方法。但是我注意到protected
修饰符在两种语言(C#和Java)中都不同。 Java中的protected
等效于C#的protected internal
,因为该成员也可以在同一包中访问。
我有两个问题
protected
(访问仅限于包含类或从包含类派生的类型。)? 最佳答案
为什么他们在Java和Java中为同一修饰符创建了不同的含义
C#?
必须在简单性和精确指定不同访问权限的能力之间做出选择。 Java的创建者和(后来)C#的创建者做出了不同的选择。
我如何保护C#(访问权限仅限于
类或从包含的类派生的类型。)在Java中?
你不能Java在这一点上受到更多限制。
但是您可能应该限制对protected
关键字的使用,因为在这两种用法中,这都意味着违反了常规封装原则。有时这种用法很有用,因为过于严格的语言可能意味着太多无用的代码,但是要当心,不要使某些事情变得束手无策,难以更改和维护。允许访问内部字段或方法来覆盖类通常意味着您的层次结构繁重,实现耦合过多(为了保持可维护性,最好采用层次结构)。
请注意,声明为没有任何访问控制修饰符的变量或方法可用于同一包中的任何其他类。我认为,这比允许任何包的子类进行访问都更明智。
Here's the complete grid: