Initialisierung im Polymorphismus von Variablen

Angenommen, Sie haben den folgenden Code

class A {
    int i = 4;

    A() { 
        print();
    }

    void print () {
        System.out.println("A");
    }
}

class B extends A {
    int i = 2;              //"this line"

    public static void main(String[] args){
        A a = new B();
        a.print();
    }

    void print () {
        System.out.println(i);
    }
}

dies druckt 0 2

Nun, wenn Sie die Zeile mit der Bezeichnung "diese Zeile" entfernen, wird der Code gedruckt. 4 4

Ich verstehe, dass, wenn es kein int gab, i = 2; Linie

A a = new B(); ruft Klasse A auf, initialisiert i als 4, ruft Konstruktor auf,
Das gibt die Kontrolle überprint() Methode inclass B und druckt schließlich 4.

a.print() werde anrufenprint() -Methode in Klasse B, da die Methoden zur Laufzeit gebunden werden, wobei auch der in Klasse A, 4 definierte Wert verwendet wird.

(Wenn meine Argumentation einen Fehler enthält, lass es mich wissen.)

Was ich jedoch nicht verstehe, ist, wenn es int i = 2 gibt.

Warum gibt der erste Teil (Objekt erstellen) beim Einfügen des Codes plötzlich 0 statt 4 aus? Warum wird die Variable nicht mit i = 4 initialisiert, sondern stattdessen ein Standardwert zugewiesen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage