- Gedanke, wenn es eine “B ist ein A” Beziehung gibt, kann B von A erben.
- Vorstellung, alles was in A ist wird copy-pasted in B
- Syntax
extends, to check useinstanceof - Die Unterklasse übernimmt Attribute & Methoden der Oberklasse
- kann nur von einer Klasse erben
- Superklassen-Konstruktor muss aufgerufen werden
Override
- freiwillige Annotation
@Overridefür Compiler-Warnungen - ist nur ein Override, wenn gleiche Signatur
public class Dog extends Animal {
// everything that is in class Animal and this:
public void bark() {
System.out.println("Woof! ");
}
}Super
- bei mehreren Vererbungen bezieht sich
superimmer auf den direkten Vorgänger
public class Dog extends Animal {
@Override
public void eat() {
super.eat(); // Animal.eat()
System.out.print(" Sausage!");
}
}Instance Of
if (p instanceof Fluxkompensator) {
fluxCount++;
}Achtung Compilerfehler

Konstruktoren
- Konstruktoren werden nicht vererbt
- Konstruktor der Superklasse wird aufgerufen, entweder
- explizit mit
super(...);als erste Anweisung, oder - automatisch (default constructor)
- explizit mit
- Sichtbarkeit immer nur allgemeiner machen nicht einschränken (public > protected > default > private)
→ siehe Vererbung und Default Constructors.png

Subtyping
- statischer Typ (hier Animal) kann sich nicht ändern
- dynamischer Typ (zuerst Cat, dann Dog) kann sich ändern, muss ein Subtyp (oder gleicher Typ) des statischen Typs sein
Casts
- kann nur “nach unten” casten, macht auch Sinn, können Dog als Animal behandeln aber nicht andersherum
- Casts ändern nicht den dynamischen Typ
- Runtime Error wenn falsch gecastet, Compiler error wenn nicht gecastet (und incompaible)
Dynamic Binding
Animal a = new Cat();
a.meow(); // compiler error, da a ist animal und animal hat nicht unbedingt meow
((Cat) a).meow(); // funktioniert mit castAnimal a = new Dog();
a.eat(); // dog kann eat overriden Beispiele
statischer Typ entscheidet über die Argumente (Argument in dem Aufruf egal, siehe unten). nutze → Casts
Attribute

Methoden
Methoden werden anhand vom dynamischen Typ ausgewählt
- hat ein Subtyp die gescuht Methode nicht, dann wird in den parents aufsteigend nach der Methode gesucht, dort wo gefunden wird sie ausgeführt (inkl. der Werte von dort)
#learn erste Zeile von der dritten box

Klasse Object
- Object hat keine Superklasse, ist über allen Klassen (außer
null) - Somit erbt jede Klasse automatisch die Methoden von Objekt
- equals
- toString
- getClass
- hashCode
- notify
- wait
Achtung, == funktioniert nicht mit Objekten, nur mit primitiven Typen. Lösung: equals()
Final
- primitiver Typ: Wert unveränderbar
- Referenztypen: Referenz unveränderbar
- finale Klassen: kein extends möglich
- Methoden: kein Override möglich
Abstracte Klassen
- verbietet subklassen