【发布时间】:2015-11-24 04:39:56
【问题描述】:
我有一个代码-
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();
}
}
这背后的确切原因是什么?提前谢谢...
【问题讨论】:
-
很难想象一个答案,因为这就是 Java 的实现方式。
-
使用
protected有什么问题?应该在这两种情况下都有效。 -
@Mephy-我不认为我的问题和你提到的问题完全一样。
-
类的所有成员都可以访问该类的其他成员,甚至是私有成员。因此,在这种情况下,您只需将 Inner 类型视为外部类的 member(虽然从技术上讲它不是成员,但您明白了)。
标签: java object inheritance outer-join