Java和c#中受保护的成员差异
Posted
技术标签:
【中文标题】Java和c#中受保护的成员差异【英文标题】:Protected member difference in Java and 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”——即,可由定义类、派生类或同一包/程序集中的类访问。 【参考方案1】:我同意 tibtof 的回答。我唯一要说的是,您的 Java 示例与 C# 示例不同。
您可以通过将您的测试类的“public static void main...”方法放在第二类中,删除测试类并使第二类公开,从而使两个代码相似。
结果与您的结果相同:它适用于 Java,但不适用于 C#。
【讨论】:
【参考方案2】:不同之处在于,在 java 中,可以从同一个包中访问受保护的成员。在 C++ 中,java 中的包级别可见性没有等价性。
【讨论】:
@tibtof 只是想确认 protected 在 c3 和 java 中具有不同的行为 在 c# 中它的工作方式如下:docs.microsoft.com/en-us/dotnet/csharp/programming-guide/… 详解:codeproject.com/Articles/1078878/…以上是关于Java和c#中受保护的成员差异的主要内容,如果未能解决你的问题,请参考以下文章