内部类中私有变量的范围

lur*_*ker 2 java scope

考虑以下代码:

public class Foo
{
    class Bar
    {
        private String barbar;

        public Bar( String b ) { barbar = b; }
    }

    class Meh
    {
        Bar b = new Bar("BAR!");

        public void displayName() {
            System.out.println( b.barbar );
        }    
    }
}
Run Code Online (Sandbox Code Playgroud)

Java允许类Meh访问私有实例变量barbar,它被声明为privateBar

我知道这个问题以前有人问在这里。但是,答案基本上只是重申观察到的范围就是它的范围(barbar在类的大括号中可以访问Foo),但是没有提供任何解释。经过一番谷歌搜索后,我无法对这种行为进行深入的讨论。我想知道的是,这种范围界定行为是否有特定的理由。我本来希望barbar在班上“大括号内”是私人的Bar

T.J*_*der 5

其基本方面是内部类(与静态嵌套类相对)是其封闭类的一部分。它们并不彼此独立,或彼此独立。因此,就像封闭类的其他部分(构造函数和方法)可以访问其所有私有信息一样,内部类的所有成员也都可以访问。从某种意义上说,内部类只是我们用作便捷抽象机制的一种虚构。而且由于内部类是封闭类的一部分,所以它们的私有信息就是它的私有信息,因此可以与其他内部类共享。