Benutzer-Werkzeuge

Webseiten-Werkzeuge


polymorphismus:start

Dies ist eine alte Version des Dokuments!


Polymorphismus

1. Definition

Wir beginnen mit einem einfachen Beispiel, in dem wir zu einer Oberklasse (Tier) zwei Unterklassen (Katze, Hund) bilden:

Einer Variablen vom Typ Tier können wir sowohl Hund-Objekte als auch Katze-Objekte zuordnen. In beiden Fällen können wir die Methode stellDichVor() der Klasse Tier aufrufen:

Tier t; 
t = new Katze("Snoopy");
t.stellDichVor();
t.schnurre(); // GEHT NICHT!
 
t = new Hund("Bello");
t.stellDichVor();
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.

2. Casten

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!
polymorphismus/start.1678379002.txt.gz · Zuletzt geändert: 2023/03/09 16:23 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki