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/05 14:05] – [1.Aspekt: Zuweisung des Objekts einer Unterklasse] Martin Pabst | klassen2:casting:start [2021/04/10 22:17] – [Casting und der Operator instanceof] Martin Pabst | ||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
Zeile 33: | Zeile 33: | ||
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
Hund h = new Hund(" | Hund h = new Hund(" | ||
Zeile 111: | Zeile 111: | ||
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
Hund h = new Hund(" | Hund h = new Hund(" | ||
Zeile 182: | Zeile 182: | ||
</ | </ | ||
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 219: | Zeile 208: | ||
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
Hund h = new Hund(" | Hund h = new Hund(" | ||
Zeile 279: | Zeile 268: | ||
== 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 '' | ||
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
Hund h = new Hund(" | Hund h = new Hund(" |
klassen2/casting/start.txt · Zuletzt geändert: 2021/12/29 11:29 von 127.0.0.1