Benutzer-Werkzeuge

Webseiten-Werkzeuge


klassen2:casting: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
Nächste ÜberarbeitungBeide Seiten der Revision
klassen2:casting:start [2020/04/28 08:45] – [Casting und der Operator instanceof] Martin Pabstklassen2:casting:start [2021/05/09 00:24] – [2. Aspekt: Casten] Martin Pabst
Zeile 1: Zeile 1:
-====== Casting und der Operator instanceof ======+====== Type Casting und der Operator instanceof ====== 
 + 
 +{{ youtube>iUYAXaDJpAA?large }} 
 + 
 + \\ 
 Da Variablen vom Datentyp einer Oberklasse auch auf Objekte der Unterklasse zeigen können, ergeben sich Situationen, in denen erst zur Laufzeit bekannt ist, welchen Datentyp das Objekt hat, auf das eine bestimmte Variable zeigt. Wie man damit umgeht, zeige ich konkret an einem Beispiel: Da Variablen vom Datentyp einer Oberklasse auch auf Objekte der Unterklasse zeigen können, ergeben sich Situationen, in denen erst zur Laufzeit bekannt ist, welchen Datentyp das Objekt hat, auf das eine bestimmte Variable zeigt. Wie man damit umgeht, zeige ich konkret an einem Beispiel:
  
Zeile 6: Zeile 10:
 <HTML> <HTML>
  
-<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false}">+<div class="java-online" style="height: 370px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Casting1'}">
  
 <script type="text/plain" title="Tier.java"> <script type="text/plain" title="Tier.java">
Zeile 33: Zeile 37:
 <HTML> <HTML>
  
-<div class="java-online" style="height: 300px; width: 100%" data-java-online="{ }">+<div class="java-online" style="height: 450px; width: 100%" data-java-online="'id': 'Casting2' , 'withBottomPanel': true}">
 <script type="text/plain" title="Main.java"> <script type="text/plain" title="Main.java">
 Hund h = new Hund("Bello"); Hund h = new Hund("Bello");
Zeile 99: Zeile 103:
 ==== 1.Aspekt: Zuweisung des Objekts einer Unterklasse==== ==== 1.Aspekt: Zuweisung des Objekts einer Unterklasse====
 Einer Variable vom Datentyp Tier (Oberklasse) kann man nicht nur Objekte vom Datentyp Tier zuweisen, sondern auch Objekte beliebiger Unterklassen der Klasse Tier. Im Beipsiel unten: Einer Variable vom Datentyp Tier (Oberklasse) kann man nicht nur Objekte vom Datentyp Tier zuweisen, sondern auch Objekte beliebiger Unterklassen der Klasse Tier. Im Beipsiel unten:
-<code java>+<code learnj>
 Hund h = new Hund("Bello"); Hund h = new Hund("Bello");
 Tier t = h; Tier t = h;
Zeile 111: Zeile 115:
 <HTML> <HTML>
  
-<div class="java-online" style="height: 300px; width: 100%" data-java-online="{ }">+<div class="java-online" style="height: 300px; width: 100%" data-java-online="'id': 'Casting3', 'withBottomPanel': true }">
 <script type="text/plain" title="Main.java"> <script type="text/plain" title="Main.java">
 Hund h = new Hund("Bello"); Hund h = new Hund("Bello");
Zeile 177: Zeile 181:
   - Entferne das Kommentarzeichen %%//%% am Beginn der Zeile 6 bzw. 10. Welche Fehlermeldung zeigt der Compiler an? Warum tut er das?   - Entferne das Kommentarzeichen %%//%% am Beginn der Zeile 6 bzw. 10. Welche Fehlermeldung zeigt der Compiler an? Warum tut er das?
   - Nach Zeile 10 wird folgendes Programm ergänzt:   - Nach Zeile 10 wird folgendes Programm ergänzt:
-<code java>+<code learnj>
    Katze k1 = h;    Katze k1 = h;
    h.schreibeName();    h.schreibeName();
 </code> </code>
-sind diese Anweisungen zulässig? Falls "nein": Warum nicht? Probiere sie aus, indem Du sie ins Beispiel oben einfügst! +sind diese Anweisungen zulässig? Falls "nein": Warum nicht? Probiere sie aus, indem Du sie ins Beispiel oben einfügst! \\ \\  
 +[[.aufgabe12:loesungen:start|Lösungen]]
 ==== 2. Aspekt: Casten ==== ==== 2. Aspekt: Casten ====
 Wurmt es Dich nicht auch, dass im Falle von  Wurmt es Dich nicht auch, dass im Falle von 
-<code java>+<code learnj>
 Hund h = new Hund("Bello"); Hund h = new Hund("Bello");
 Tier t = h; Tier t = h;
Zeile 192: Zeile 196:
 die Anweisung in Zeile 3 nicht möglich ist, obwohl wir sicher wissen, dass ''t'' gerade auf ein ''Hund''-Objekt zeigt? Warum "weiß" das der Compiler nicht? \\  die Anweisung in Zeile 3 nicht möglich ist, obwohl wir sicher wissen, dass ''t'' gerade auf ein ''Hund''-Objekt zeigt? Warum "weiß" das der Compiler nicht? \\ 
 Denke Dir folgende Variante: Denke Dir folgende Variante:
-<code java>+<code learnj>
 Hund h = new Hund("Bello"); Hund h = new Hund("Bello");
 Katze k = new Katze("Snoopy"); Katze k = new Katze("Snoopy");
Zeile 208: Zeile 212:
 <HTML> <HTML>
  
-<div class="java-online" style="height: 300px; width: 100%" data-java-online="{ }">+<div class="java-online" style="height: 300px; width: 100%" data-java-online="'id': 'Casting4', 'withBottomPanel': true}">
 <script type="text/plain" title="Main.java"> <script type="text/plain" title="Main.java">
 Hund h = new Hund("Bello"); Hund h = new Hund("Bello");
Zeile 268: Zeile 272:
  
 == Aufgaben == == Aufgaben ==
-  3. Nimm in Zeile 8 das Casting weg, schreibe also ''Hund h2 = t;''. Was passiert? Warum? +3. Nimm in Zeile 8 das Casting weg, schreibe also ''Hund h2 = t;''. Was passiert? Warum? \\ \\  
-  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? +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? \\ \\  
-  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! +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! \\ \\  
 + \\  
 +[[.aufgabe345:loesungen:start|Lösungen]]
 ==== 3. Aspekt: instanceof ==== ==== 3. Aspekt: instanceof ====
 Oft kann eine Variable an einer Stelle des Programms zu verschiedenen Zeiten verschiedene Objekte enthalten, so dass wir im Programm flexibel darauf reagieren müssen. Für diesen Zweck gibt es den Operator ''instanceof''. Damit lässt sich testen, ob ein Objekt einer bestimmten Klasse angehört. Oft kann eine Variable an einer Stelle des Programms zu verschiedenen Zeiten verschiedene Objekte enthalten, so dass wir im Programm flexibel darauf reagieren müssen. Für diesen Zweck gibt es den Operator ''instanceof''. Damit lässt sich testen, ob ein Objekt einer bestimmten Klasse angehört.
 <HTML> <HTML>
  
-<div class="java-online" style="height: 300px; width: 100%" data-java-online="{ }">+<div class="java-online" style="height: 300px; width: 100%" data-java-online="'id': 'Casting5'}">
 <script type="text/plain" title="Main.java"> <script type="text/plain" title="Main.java">
 Hund h = new Hund("Bello"); Hund h = new Hund("Bello");
klassen2/casting/start.txt · Zuletzt geändert: 2021/12/29 11:29 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki