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; LinieA 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?