Karte postkarte2 = new Feiertag( "Bob" ) ; Karte postkarte3 = new Geburtstag( "Emily", 22 ) ;
Ja, beide sind korrekt, denn Feiertag
«Ist eine-» Karte
und Geburtstag
«Ist eine-» Karte
.
Eine Referenzvariable der Klasse Karte
kann von jedem Objekt, das durch Vererbung mit der Klasse Karte
verwandt ist, verwendet werden.
Zum Beispiel, eine Karte
-Referenzvariable postkarte2
kann eine Referenz auf ein Feiertag
-Objekt, ein Valentin
-Objekt oder ein Geburtstag
-Objekt enthalten.
Üblicherweise werden Referenzvariablen vom Typ der Superklasse verwendet, um Objektreferenzen ihrer Subklassen zu enthalten.
Wichtiger Hinweis:
Wenn eine Methode aufgerufen wird, ist es die Klasse des Objekts (nicht die der Variablen), die bestimmt welche Methode ausgeführt wird.
Genau das ist es, was wir erwarten würden. Die ausgeführte Methode ist Teil des Objekts. Zum Beispiel:
Karte postkarte = new Valentin( "Joe", 14 ) ; postkarte.gruss(); Karte postkarte2 = new Feiertag( "Bob" ) ; postkarte2.gruss(); Karte postkarte3 = new Geburtstag( "Emily", 12 ) ; postkarte3.gruss();
Das wird die gruss()
Methode für ein Valentin
-Objekt ausführen,
dann wird die gruss()
Methode für ein Feiertag
-Objekt ausgeführt und dann wird die gruss()
Methode für ein Geburtstag
-Objekt ausgeführt.
Der Typ des Objekts bestimmt in jedem Fall welche Version der Methode ausgeführt wird.
Ist es notwendig drei verschiedene Variablen für dieses Programmfragment zu verwenden?