Dlaczego pola nie są inicjowane wartościami innymi niż domyślne, gdy metoda jest uruchamiana z super ()?

Musiałem spędzić ponad godzinę, próbując znaleźć przyczynę nieoczekiwanego zachowania. Skończyło się na tym, że zdałem sobie sprawę, że pole nie jest ustawione tak, jak oczekiwałem. Zanim wzruszysz ramionami i pójdę dalej, chciałbym zrozumieć, dlaczego tak to działa.

W poniższym przykładzie oczekuję, że dane wyjściowe będą prawdziwe, ale są fałszywe. Inne testy pokazują, że zawsze otrzymuję to, co jest wartością domyślną tego typu.

public class ClassOne {

    public ClassOne(){
        fireMethod();
    }

    protected void fireMethod(){
    }

}

public class ClassTwo extends ClassOne {

    boolean bool = true;

    public ClassTwo() {
        super();
    }

    @Override
    protected void fireMethod(){
        System.out.println("bool="+bool);
    }

    public static void main(String[] args) {
        new ClassTwo();
    }
}

wydajność:

bool=false

questionAnswers(5)

yourAnswerToTheQuestion