Это скорее головоломка, чем вопрос. У меня есть следующий код:
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 *, поскольку конструктор базового класса не отображается.
Почему компилятор не выдает ошибку в моем первом сценарии, когда оба класса объявляются статическими в пределах одного класса?