日期:2014-05-19  浏览次数:20717 次

请懂得java和c#两门语言的朋友进来看一下.
c#中如下:
using   System;
class   A
{
void   qq()
{
B   b=new   B();
b.age=33;//失败
}
public   static   void   Main(string[]args)
{
}
}
class   B:A
{
protected   int   age=22;
}

----------------------------------]
java中:
class   A
{
void   qq()
{
B   b=new   B();
b.age=33;//成功
}
public   static   void   main(String[]args)
{
System.out.println( "success ");
}
}
class   B   extends   A
{
protected   int   age=22;
}

想请问一下,此时两种语言的运行机制.

------解决方案--------------------
shalen520(Love will keep us alive)

而java中如果两个类在同一个包内的话,protected变量是可以被访问的,并不是缺陷,跟c#的internal差不多

=============================================================================

真的?
------解决方案--------------------
事实上, Java 中的 protected 修饰符成员,对于所有子类以及同一个包内的所有其他类都是可见的。我看到这里的时候,我几乎崩溃了,多么好的 Java ,不知为何 James 他们要如此设计?
我没有多少 java 的实践经验,体会不到如此设计的好处。


我觉得这是胡说八道,当然这需要Java的人出来解释下。


我的印象中,Java中有四种访问权限:

public和private是不用说了,与C++/C#语义相同,protected是指派生类能访问,而同一个包内能访问是啥都不写,没有访问修饰符。等同于C#的internal。