嵌套类中私有构造函数的范围
问题内容:
这更多的是 困惑而 不是问题。我有以下代码:
public class PrivateBaseConstructor {
public static class BaseClass {
private BaseClass() {
}
}
public static class DerivedClass extends BaseClass {
public DerivedClass() {
super(); // 1*
}
}
}
super();
即使基类构造函数为,在这里也允许对1 * 的调用private
。如果我们在同一包中将这些类编写为单独的类:
BClass.java
public class BClass {
private BClass() {
}
}
DClass.java
public class DClass extends BClass {
public DClass() {
super(); // 2*
}
编译器正确地在2 *处给出了错误,因为基类构造函数不可见。
当两个类在一个类中都声明为静态时,为什么编译器没有在我的第一种情况下引发错误?
问题答案:
如果成员或构造函数被声明为私有,则仅当访问发生在包含成员或构造函数的声明的顶级类(第7.6节)的主体内时,才允许访问。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.1