考虑以下代码:

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


Java允许类Meh访问私有实例变量barbar,该变量在private中声明为Bar

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

最佳答案

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

10-08 08:55