====== Casten (explizite Typumwandlung) ====== Wir erweitern die Klasse ''Katze'' um eine Methode ''miaue'' und die Klasse ''Hund'' um eine Methode ''belle'': {{ :polymorphismus:pasted:20230309-172048.png?400 }} Können wir diese Methoden mit Hilfe der Variable ''t'' aufrufen? Tier t; t = new Katze("Snoopy"); t.miaue(); // GEHT NICHT! t = new Hund("Bello"); t.belle(); // GEHT NICHT! Obwohl die Variable ''t'' zum Zeitpunkt des Aufrufes ''t.schnurre()'' auf ein ''Katze''-Objekt zeigt, akzeptiert der Compiler diesen Aufruf nicht, denn die Deklaration ''Tier t'' in der ersten Zeile sichert nur zu, dass ''t'' auf ein Objekt der Klasse ''Tier'' oder einer Unterklasse davon zeigt. \\ \\ **casten:** \\ Aber wir wissen doch, dass beide Aufrufe in Ordnung sind. Können wir das dem Compiler nicht mitteilen? \\ Tier t; t = new Katze("Snoopy"); ((Katze)t).miaue(); // OK! t = new Hund("Bello"); ((Hund)t).belle(); // OK! ((Katze)t).miaue(); // Führt zur Laufzeit zu einem Fehler! Durch den Zusatz ''(Hund)'' vor der Variable ''t'' teilen wir dem Compiler mit, dass er davon ausgehen darf, dass ''t'' zur Laufzeit des Programms auf ein Objekt der Klasse ''Hund'' zeigt. Kurzgesagt: Wir **casten** ''t'' zum Typ ''Hund''.