Karte k; Valentin v; Geburtstag g; Feiertag f; k = new Valentin("Debby", 8); //OK g = new Valentin("Elroy", 3); //FALSCH v = new Valentin("Fiona", 3); //OK f = new Geburtstag("Greg", 35); //FALSCH
Hier ist die Abbildung einer anderen Hierarchie: In dieser Hierarchie gibt es keine abstrakten Klassen, also kann jede Klasse instanziiert werden. Wie wir bereits gesehen haben ist das Folgende OK:
superklasseReferenz = subklasseReferenz
Die Referenzvariable einer Superklasse kann die Referenz auf ein Objekt einer ihrer eigenen Subklassen (oder deren Subklassen und so weiter) enthalten. Aber, die umgekehrte Richtung
// falsch, falsch, falsch!!!
subklasseReferenz = superklasseReferenz
ist nicht zulässig.
Hier sind einige Variablen:
Nager nager; Ratte ratte; Maus maus;
Wir betrachten die Tabelle und entscheiden für jeden Codeabschnitt ob er korrekt ist oder nicht.
Codeabschnitt | OK oder Nicht? | Codeabschnitt | OK oder Nicht? |
---|---|---|---|
nager = new Ratte(); |
nager = new Feldmaus(); |
||
maus = new Ratte(); |
maus = new Nager(); |
||
ratte = new Nager(); |
ratte = new Wasserratte(); |
||
ratte = new Feldmaus(); |
ratte = new Maus(); |
Was denkt Ihr, gibt es noch viel mehr über Vererbung und Polymorphie zu lernen?