这更像是一个谜题而不是问题。我有以下代码:
public class PrivateBaseConstructor {
public static class BaseClass {
private BaseClass() {
}
}
public static class DerivedClass extends BaseClass {
public DerivedClass() {
super(); // 1*
}
}
}
这里允许在 1* 处调用 super();
,即使基类构造函数是 private
。如果我们将这些类写成同一个包中的单独类:
BClass.java
public class BClass {
private BClass() {
}
}
DClass.java
public class DClass extends BClass {
public DClass() {
super(); // 2*
}
编译器正确地在 2* 处给出错误,因为基类构造函数不可见。
为什么在我的第一个场景中当两个类都在一个类中声明为静态时,编译器不会抛出错误?
最佳答案
如果成员或构造函数被声明为私有(private),则当且仅当它出现在包含成员或构造函数声明的顶级类(第 7.6 节)的主体内时,才允许访问。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.1
关于java - 嵌套类中私有(private)构造函数的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12542193/