Benutzer-Werkzeuge

Webseiten-Werkzeuge


polymorphismus:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
polymorphismus:start [2023/03/09 16:26] Martin Pabstpolymorphismus:start [2023/03/09 16:50] (aktuell) – [2. Casten] Martin Pabst
Zeile 14: Zeile 14:
 t.stellDichVor(); t.stellDichVor();
 </code> </code>
 +Die Variable ''t'' kann sowohl auf ein ''Hund''-Objekt zeigen als auch auf ein ''Katze''-Objekt. Diesen Sachverhalt nennt man **Polymorphismus**. Das Wort kommt aus dem Griechischen und bedeutet "Vielgestaltigkeit".
 </WRAP> </WRAP>
  
-Die Variable ''t'' kann sowohl auf ein ''Hund''-Objekt zeigen als auch auf ein ''Katze''-Objekt. Diesen Sachverhalt nennt man **Polymorphismus**. Das Wort kommt aus dem Griechischen und bedeutet "Vielgestaltigkeit". 
  
 <HTML> <HTML>
Zeile 67: Zeile 67:
  
  
-===== 2. Casten ===== 
-<WRAP center round info 100%> 
-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? 
-<code java> 
-Tier t;  
-t = new Katze("Snoopy"); 
-t.miaue(); // GEHT NICHT! 
- 
-t = new Hund("Bello"); 
-t.belle(); // GEHT NICHT! 
-</code> 
-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? \\  
-<code java> 
-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! 
-</code> 
- 
-</WRAP> 
- 
-<HTML> 
- 
-<div class="java-online" style="height: 50vh; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'polymorphismus2'}"> 
- 
-<script type="text/plain" title="Test1.java"> 
- 
-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! 
- 
-class Tier { 
-   String name; 
-   String art; 
- 
-   Tier(String art, String name) { 
-      this.art = art; 
-      this.name = name; 
-   } 
- 
-   void stellDichVor() { 
-      println("Ich heiße " + name + " und bin ein/e " + art); 
-   } 
- 
-} 
- 
-class Katze extends Tier { 
-   Katze(String name) { 
-      super("Katze", name); 
-   } 
-    
-   void miaue(){ 
-      println("Miauuu!"); 
-   } 
-} 
- 
-class Hund extends Tier { 
-   Hund(String name) { 
-      super("Hund", name); 
-   } 
-    
-   void belle(){ 
-      println("Wau!"); 
-   } 
-} 
- 
- 
-</script> 
- 
-</div> 
- 
- 
-</HTML> 
  
polymorphismus/start.1678379161.txt.gz · Zuletzt geändert: 2023/03/09 16:26 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki