这更像是一个谜题而不是问题。我有以下代码:
public class PrivateBaseConstructor {
public static class BaseClass {
private BaseClass() {
}
}
public static class DerivedClass extends BaseClass {
public DerivedClass() {
super(); // 1*
}
}
}
即使基类构造函数是 private
,在 1*处调用 super();
是允许的。如果我们将类写成同一包中的单独类:
BClass.java
public class BClass {
private BClass() {
}
}
DClass.java
public class DClass extends BClass {
public DClass() {
super(); // 2*
}
由于基类构造函数不可见,因此编译器在2*处正确地给出了错误。
为什么在我的第一个场景中,当两个类在同一类中声明为静态时,编译器没有抛出错误?