3. Nimm in Zeile 8 das Casting weg, schreibe also Hund h2 = t;
. Was passiert? Warum?
4. Wenn wir ungerechtfertigt casten, vertraut uns der Compiler dann? Probiere es aus, indem Du die Zeile 5 ersetzt durch ((Katze)t).miaue();
. Was passiert? Warum?
5. Verändert das Casten durch den Term (Katze)t
das Objekt, auf das t
zeigt von einem Tier
-Objekt zu einem Katze
-Objekt? Begründe Deine Antwort!
Der Compiler meldet: „Der Term vom Typ Tier kann der Variable vom Typ Hund nicht zugewiesen werden.“. Einer Variable einer Oberklasse können Objekte einer Unterklasse zugewiesen werden, aber nicht anders herum.
Zur Compilezeit geschieht nichts, der Computer „vertraut“ uns. Der Fehler wird aber zur Laufzeit entdeckt. Der Computer meldet dann, dass ein Objekt vom Typ Hund nicht nach Katze gecastet werden kann.
Das Casten (Katze)t geht nur, wenn t auf ein Objekt der Klasse Katze oder einer Unterklasse davon zeigt. Dieses Objekt wird beim Casten nicht verändert, sondern ist schon ein Katze-Objekt!