zakres prywatnego konstruktora w klasie zagnieżdżonej
To więcej niżpuzzle niż pytanie. Mam następujący kod:
public class PrivateBaseConstructor {
public static class BaseClass {
private BaseClass() {
}
}
public static class DerivedClass extends BaseClass {
public DerivedClass() {
super(); // 1*
}
}
}
Oto wezwaniesuper();
w 1 * dozwolone jest zdarzenie, chociaż konstruktor klasy bazowej jestprivate
. Jeśli piszemy klasy jako oddzielne klasy w tym samym pakiecie:
BClass.java
public class BClass {
private BClass() {
}
}
DClass.java
public class DClass extends BClass {
public DClass() {
super(); // 2*
}
Kompilator słusznie podaje błąd 2 *, ponieważ konstruktor klasy bazowej nie jest widoczny.
Dlaczego kompilator nie zgłasza błędu w moim pierwszym scenariuszu, gdy obie klasy są deklarowane jako statyczne w jednej klasie?