内部类变量的可见性

时间:2015-08-29 18:17:39

标签: java object inheritance outer-join

我有一个代码 -

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();
    }
}

背后的确切原因是什么?提前感谢...

1 个答案:

答案 0 :(得分:4)

请参阅Java Language Specification

  

否则,如果成员或构造函数被声明为private,那么当且仅当它出现在顶级类(第7.6节)的主体内时才允许访问。成员或构造函数的声明。

意味着顶级类可以访问其嵌套类的私有成员。

或者说另一种方式:私有意味着顶层类的私有和它所有的嵌套类,而不是嵌套类本身的私有。