【问题标题】:Protected member difference in Java and c#Java和c#中受保护的成员差异
【发布时间】:2014-05-13 13:17:09
【问题描述】:

我在 Java 中有以下代码

public class First {
    protected int z;

    First()
    {
        System.out.append("First const");
    }

}

class Second extends First {

    private int b;
    protected int a;

}

class Test {
    /**
     * @param args the command line arguments
     */
    int a=0;

    public static void main(String[] args) {
        // TODO code application logic here
        First t=new Second();
        t.z=10; work fine
        First x=new First();
        x.z=1; // works fine
    }
}

所以我可以通过创建base 类的对象来访问z

C#

class A
{
    protected int x = 123;
}

class B : A
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        // Error CS1540, because x can only be accessed by 
        // classes derived from A. 
        // a.x = 10;  

        // OK, because this class derives from A.
        b.x = 10;
    }
}

所以如果通过基类对象,我无法访问a。从OOP 的角度来看,我发现Java 和C# 相似,protected 成员的两种语言之间有什么区别吗?

with reference to this doc

【问题讨论】:

  • Java 中的“protected”等同于 C# 中的“protected internal”——即,可由定义类、派生类或同一包/程序集中的类访问。

标签: c# java oop protected


【解决方案1】:

我同意 tibtof 的回答。我唯一要说的是,您的 Java 示例与 C# 示例不同。

您可以通过将您的测试类的“public static void main...”方法放在第二类中,删除测试类并使第二类公开,从而使两个代码相似。

结果与您的结果相同:它适用于 Java,但不适用于 C#。

【讨论】:

    【解决方案2】:

    不同之处在于,在 java 中,可以从同一个包中访问受保护的成员。在 C++ 中,java 中的包级别可见性没有等价性。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-12
    • 2014-06-09
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多