2019-11-07 13:50:26 +00:00
parent 9df742a939
commit c020486335

@@ -23,4 +23,16 @@
- **Short-Circuit geht vor**: Bei short-circuit werden Seiteneffekte nicht nach Operator-Vorrang, sondern nach short circuit-Regeln von links nach rechts angewandt.
- **Referenz abstrakte Klasse kann null zugewiesen werden**: `abstract class A {}` -> `A a = null;` ist erlaubt.
- **Final-Klassen im JDK**: Primitiven-Wrapper, `System`, `String`, `StringBuilder`, `LocalDate` sind `final`. `Number` nicht.
- **Polymorphie nicht bei Feldern**: Felder werden auf dem deklarierten, nicht dem tatsächlichen Typ aufgerufen. Anders als bei Methoden. Dabei auch auf Compilefehler achten. Felder werden aber vererbt, sind also auch sichtbar (wenn Sichtbarkeit passend)
- **Polymorphie nicht bei Feldern**: Felder werden auf dem deklarierten, nicht dem tatsächlichen Typ aufgerufen. Anders als bei Methoden. Dabei auch auf Compilefehler achten. Felder werden aber vererbt, sind also auch sichtbar (wenn Sichtbarkeit passend)
- **Exceptions**:
- `RuntimeException` ist eine `Exception`, wird also auch von `catch (Exception e)` gefangen
- `RuntimeException`s müssen nicht gefangen oder deklariert werden.
- Alle anderen Exceptions müssen deklariert *und* gefangen (oder wiederum deklariert) werden.
- *Todo*: Müssen deklarierte Checked Exceptions geworfen werden? -> Nein
- `IOException` ist eine checked Exception
- Überschriebene Methoden müssen Exceptions oder **Subklassen** deklarieren. (Dann bei super-Aufrufen die ursprüngliche Exception aber auch behandeln)
- **Konstruktoren und Vererbung**:
- `super` erster Aufruf, auch nicht in try-Block einbettbar
- Dadurch können Exceptions der Konstruktoren der Superklassen nicht gefangen und selbst deklariert werden
- Konstruktor der Unterklasse kann dieselbe Exception oder eine **Superklasse** deklarieren (anders als beim Überschreiben, wo es Subklassen sind.
- Konstruktoren werden nicht vererbt, damit nicht überschrieben!