diff --git a/Aufpassen%21.md b/Aufpassen%21.md index 36724cb..9afffd4 100644 --- a/Aufpassen%21.md +++ b/Aufpassen%21.md @@ -91,6 +91,7 @@ - **if/else ohne Klammerung**: Else gehört immer zum if davor. - **instanceof**: - Prüft Typgleichheit für Referenzen (nicht Klassen, nicht Primitive) + - Laufzeit-Typ entscheidend - Kann nur auf Objekte derselben Klassenhierarchie angewendet werden (Sonst Compilerfehler) - True, wenn Objekt vom Typ der Klasse/Interface oder einer Subklasse davon (Is-a test) - ``null instanceof BeliebigerTyp`` ist immer false @@ -103,4 +104,15 @@ - Primitive - Expliziter Cast erforderlich, wenn Genauigkeit nicht ausreicht - Bei Zahlen kann so auch Genauigkeit verlorengehen - - Bei ``+=, ...`` impliziter Cast, nicht explizit erforderlich \ No newline at end of file + - Bei ``+=, ...`` impliziter Cast, nicht explizit erforderlich + - Objekte + - Cast außerhalb Typhierarchie erzeugt Compilefehler + - Angegebener Typ im Cast muss Laufzeittyp des gecasteten Objekts oder Superklasse entsprechen + - Angegebener Typ muss Typ der Variablen, der zugewiesen wird oder Subtyp entsprechen + - ``null`` kann auf alles gecastet werden + - In Typhierarchie ggf. ClassCastException, wenn doch nicht kompatibel + - Sinnlose Casts sind erlaubt + - Downcasting: Wenn Typ Oberklasse deklariert, aber Laufzeit Unterklasse: Zuweisung an Unterklasse per explizitem Cast möglich (ggf. ClassCastException zur Laufzeit) + - Upcasting: Referenzen einer Unterklasse können ohne explizitem Cast einer Oberklasse zugewiesen werden. + +- **Scope**: Variablen im Scope dürfen nicht neu definiert werden. Auch z.B. nicht in for-Schleifenvariable. \ No newline at end of file