5

我在比较 Java 和 C# 中的访问修饰符。我想protected internal在 Java 中找到 C# 的替代方案。但我注意到protected修饰符在两种语言(C#Java)中是不同的。protected在 Java 中等同于protected internalC#,因为该成员也可以在同一个包中访问。

我有两个问题

  • 为什么他们在 Java 和 C# 中为相同的修饰符创建了不同的含义?
  • 我如何在 Java 中拥有protectedC#(访问仅限于包含类或从包含类派生的类型。 )?
4

2 回答 2

2

为什么他们在 Java 和 C# 中为相同的修饰符创建了不同的含义?

必须在简单性和精确指定不同访问权限的能力之间做出选择。Java 的创建者和(后来)C# 的创建者做出了不同的选择。

如何在 Java 中保护 C#(访问仅限于包含类或从包含类派生的类型。)?

你不能。Java 在这一点上更受限制。

但是您可能应该限制protected关键字的使用,因为这两种使用都意味着破坏一般封装原则。这种用法有时很有用,因为过于严格的语言可能意味着太多无用的代码,但请注意不要制作过于束缚且难以更改和维护的东西。授予对内部字段或方法的访问权限以覆盖类通常意味着您有一个沉重的层次结构和过多的实现耦合(为了可维护性,更喜欢组合而不是层次结构)。

请注意,在没有任何访问控制修饰符的情况下声明的变量或方法可用于同一包中的任何其他类。在我看来,这比允许任何包的子类访问更明智。

这是完整的网格

在此处输入图像描述

于 2012-09-13T07:06:32.300 回答
0

在 Java API 文档中,Sun.com 不提供关键字访问说明符。试试这个例子

D:\>javac Demo.java
Demo.java:1: error: **modifier** private not allowed here
private class Test
        ^
1 error
于 2014-08-12T13:46:46.183 回答