2019-11-14 20:06:10 +00:00
parent 09c3974d67
commit 4f798b2b05

@@ -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
- 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.