klassen2:casting:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
klassen2:casting:start [2020/05/26 15:53] – Martin Pabst | klassen2:casting:start [2021/04/18 09:28] – Martin Pabst | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Casting und der Operator instanceof ====== | ====== Casting und der Operator instanceof ====== | ||
+ | |||
+ | {{ youtube> | ||
+ | |||
Da Variablen vom Datentyp einer Oberklasse auch auf Objekte der Unterklasse zeigen können, ergeben sich Situationen, | Da Variablen vom Datentyp einer Oberklasse auch auf Objekte der Unterklasse zeigen können, ergeben sich Situationen, | ||
Zeile 6: | Zeile 9: | ||
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
Zeile 33: | Zeile 36: | ||
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
Hund h = new Hund(" | Hund h = new Hund(" | ||
Zeile 182: | Zeile 185: | ||
</ | </ | ||
sind diese Anweisungen zulässig? Falls " | sind diese Anweisungen zulässig? Falls " | ||
- | + | [[.aufgabe12:loesungen:start|Lösungen]] | |
- | <hidden Lösungen> | + | |
- | == Aufgabe 1: == | + | |
- | Der Compiler zeigt folgenden Fehler an: \\ | + | |
- | "Der Typ besitzt keine Methode mit dem Bezeichner belle." | + | |
- | Das tut er, weil t eine Variable vom Typ Tier ist und die Klasse Tier keine Methode belle besitzt. Dass das Objekt, auf das t zeigt, ein Hund-Objekt ist (und sehr wohl eine Methode belle besitzt), weiß der Compiler nicht. | + | |
- | + | ||
- | == Aufgabe 2: == | + | |
- | Katze k1 = h; \\ | + | |
- | ist nicht zulässig, da h eine Variable der Klasse Hund ist. Diese kann nicht nach Katze gecastet werden, da Katze keine Unterklasse von Hund ist. | + | |
- | h.schreibeName(); | + | |
- | </ | + | |
==== 2. Aspekt: Casten ==== | ==== 2. Aspekt: Casten ==== | ||
Wurmt es Dich nicht auch, dass im Falle von | Wurmt es Dich nicht auch, dass im Falle von | ||
Zeile 279: | Zeile 271: | ||
== Aufgaben == | == Aufgaben == | ||
- | | + | 3. Nimm in Zeile 8 das Casting weg, schreibe also '' |
- | | + | 4. Wenn wir ungerechtfertigt casten, vertraut uns der Compiler dann? Probiere es aus, indem Du die Zeile 5 ersetzt durch '' |
- | | + | 5. Verändert das Casten durch den Term '' |
- | + | \\ | |
- | <hidden Lösungen> | + | [[.aufgabe345:loesungen:start|Lösungen]] |
- | == Aufgabe 3: == | + | |
- | Der Compiler meldet: "Der Term vom Typ Tier kann der Variable vom Typ Hund nicht zugewiesen werden.". Einer Variable einer Oberklasse können Objekte einer Unterklasse zugewiesen werden, aber nicht anders herum. | + | |
- | == Aufgabe 4: == | + | |
- | Zur Compilezeit geschieht nichts, der Computer " | + | |
- | == Aufgabe 5: == | + | |
- | Das Casten (Katze)t geht nur, wenn t auf ein Objekt der Klasse Katze oder einer Unterklasse davon zeigt. Dieses Objekt wird beim Casten **nicht** verändert, sondern **ist** schon ein Katze-Objekt! | + | |
- | </ | + | |
==== 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 '' | 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 '' |
klassen2/casting/start.txt · Zuletzt geändert: 2021/12/29 11:29 von 127.0.0.1