请懂得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。