我有一个代码 -
public class Hello
{
void create()
{
Inner obj=new Inner();
obj.r=100; //Able to access private variable x
obj.display(); //displays 100
}
class Inner
{
private int r=45;
void display()
{
System.out.println("r is : "+r);
}
}
public static void main(String[] args)
{
Hello ob=new Hello();
ob.create();
}
}
在上面的代码中,通过创建内部类的实例,我们能够访问该类中定义的私有变量。但这不是继承的情况。为什么会这样?例如,在这个代码 -
class One
{
private int x;
void getData()
{
x=10;
}
void display()
{
System.out.println("x is : "+x);
}
}
class Two extends One
{
int y;
void putData()
{
One o=new One();
o.x=13; //Error
}
}
public class File
{
public static void main(String[] args)
{
Two to=new Two();
to.putData();
}
}
背后的确切原因是什么?提前感谢...
答案 0 :(得分:4)
请参阅Java Language Specification。
否则,如果成员或构造函数被声明为
private
,那么当且仅当它出现在顶级类(第7.6节)的主体内时才允许访问。成员或构造函数的声明。
意味着顶级类可以访问其嵌套类的私有成员。
或者说另一种方式:私有意味着顶层类的私有和它所有的嵌套类,而不是嵌套类本身的私有。