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