嵌套类中方法的专用访问修饰符



请考虑以下代码片段。

public class HelloWorld{
private static class InnerA{
private int _a;
private InnerA( int a ){
_a = a;
}
private int getA(){
return _a;
}
}
private static class InnerB{
private InnerB(){
InnerA inner_a = new InnerA( 1 ); //isn't the constructor of InnerA private??
System.out.println( inner_a.getA() ); //isn't getA() a private function of InnerA??
}
}
public static void main(String []args){
InnerB b = new InnerB();
}
}

我的问题是:

  1. InnerA的构造函数被标记为私有,但为什么从InnerB的构造函数内部成功调用它?

  2. 为什么getA(),作为InnerA的私有方法,可以被调用来自InnerB内部?我想把这个方法标记为私有会阻止它在InnerA之外使用吗?

来自语言规范:

否则,成员或构造函数被声明为私有,并且当且仅当访问发生在包含成员或构造函数声明的顶级类型(§7.6(的主体内时,才允许访问。

同一顶级类中的东西总是可以访问的。

嵌套的静态类可以访问其封闭类的所有成员,包括私有成员。

它们无法访问其封闭实例的实例成员(公共或私有(。但是,如果将静态嵌套类的方法传递给封闭类的实例,则嵌套类将能够访问封闭类的所有成员,无论其访问级别如何。

文档中写道:

嵌套类是其封闭类的成员。非静态嵌套类(内部类(可以访问封闭的其他成员类,即使它们被声明为私有。

最新更新