Warum werden Felder nicht mit Nicht-Standardwerten initialisiert, wenn eine Methode von super () ausgeführt wird?

Ich muss über eine Stunde damit verbracht haben, den Grund für ein unerwartetes Verhalten herauszufinden. Am Ende wurde mir klar, dass ein Feld nicht so eingestellt wurde, wie ich es erwartet hatte. Bevor ich mit den Schultern zucke und weitermache, möchte ich verstehen, warum das so funktioniert.

Wenn Sie das folgende Beispiel ausführen, würde ich erwarten, dass die Ausgabe wahr ist, aber sie ist falsch. Andere Tests zeigen, dass ich immer den Standardwert dieses Typs erhalte.

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();
    }
}

Ausgabe:

bool=false

Antworten auf die Frage(5)

Ihre Antwort auf die Frage