Katze k1 = h; h.schreibeName();
sind diese Anweisungen zulässig? Falls „nein“: Warum nicht? Probiere sie aus, indem Du sie ins Beispiel oben einfügst!
Der Compiler zeigt folgenden Fehler an:
„Der Typ besitzt keine Methode mit dem Bezeichner belle.“
Das tut er, weil t eine Variable vom Typ Tier ist und die Klasse Tier keine Methode belle besitzt. Dass das Objekt, auf das t zeigt, ein Hund-Objekt ist (und sehr wohl eine Methode belle besitzt), weiß der Compiler nicht.
Katze k1 = h;
ist nicht zulässig, da h eine Variable der Klasse Hund ist. Diese kann nicht nach Katze gecastet werden, da Katze keine Unterklasse von Hund ist.
h.schreibeName(); ist zulässig, da h eine Variable der Klasse Hund ist. Diese erbt von der Klasse Tier und besitzt daher eine Methode schreibeName().