Вот некоторый код, который, я думаю, демонстрирует вашу проблему:
public abstract class Super {
public static void main(String[] args) {
new Sub();
}
public Super() {
printMe();
}
abstract void printMe();
private static class Sub extends Super {
private final Object x = new Object();
public Sub() {
super();
printMe();
}
@Override
protected void printMe() {
System.out.println("printMe: " + x);
}
}
}
Вывод:
printMe: null
printMe: java.lang.Object@1fee6fc
, то есть поле x
, которое явноинициализируется и выглядит так, как будто он не может быть null
на самом деле не инициализирован во время конструктора суперкласса.Надеюсь, это прояснит ситуацию.