Benutzer-Werkzeuge

Webseiten-Werkzeuge


polymorphismus:casting

Casten (explizite Typumwandlung)

Wir erweitern die Klasse Katze um eine Methode miaue und die Klasse Hund um eine Methode belle:

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.

polymorphismus/casting.txt · Zuletzt geändert: 2023/03/09 17:00 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki