内部类中顶级类成员的可访问性?

时间:2011-06-05 16:26:45

标签: java accessibility inner-classes nested-class

我有一个关于成员内部类的顶级类可访问性的查询。 我刚刚读到了本地或匿名内部类只能访问最终变量的原因。原因是JVM将这两个类作为完全不同的类处理,因此,如果一个类中的变量值发生变化,则无法在运行时反映出来时间在另一个类文件中。

然后,我的问题是内部成员类(非静态)如何能够访问顶级类成员的成员,因为JVM仍然将这两个类视为不同的类文件?如果顶级类的成员变量的值发生变化,那么如何在运行时反映内部类的类文件呢?

2 个答案:

答案 0 :(得分:5)

它们是单独的类,但是对“内部”类中的“外部”类的实例有隐式引用。它基本上充当变量,您可以隐式或通过ContainingClassname.this的特殊语法获取它。

请注意,如果您想要这样的隐式引用,则应将嵌套类声明为static

public class Outer
{
    private class Inner
    {
        // There's an implicit reference to an instance of Outer in here.
        // For example:
        // Outer outer = Outer.this;
    }

    private static class Nested
    {
        // There's no implicit reference to an instance of Outer here.
    }
}

答案 1 :(得分:1)

this隐含最终,你不能改变它。当你写一些像

这样的东西
class Outer {
    int a;
    class Inner {
       { a = 1; }
    }
}

你实际上和

一样写作
class Outer {
    int a;
    class Inner {
       { Outer.this.a = 1; }
    }
}

a不是最终版本,而是Outer.this,这是使用的参考。