Inheritance (Vererbung)
Kurz: Ein Mechanismus, mit dem eine Klasse (Unterklasse) die Felder und Methoden einer anderen Klasse (Oberklasse) übernimmt, statt sie erneut zu definieren.
Genauer: Die Unterklasse kann geerbte Methoden übernehmen, überschreiben (mit eigenem Verhalten neu definieren) oder um zusätzliche eigene Methoden erweitern. Über das super-Keyword kann sie trotzdem auf die ursprüngliche Implementierung der Oberklasse zugreifen. Vererbung ist eines der vier Grundprinzipien der OOP und die technische Basis für Polymorphie.
Im Detail
class Fahrzeug {
int geschwindigkeit = 0;
void beschleunigen() { geschwindigkeit += 10; }
}
class Auto extends Fahrzeug {
// erbt geschwindigkeit UND beschleunigen() automatisch
void hupen() { System.out.println("Hup!"); } // eigene, zusätzliche Methode
}Auto bekommt geschwindigkeit und beschleunigen() von Fahrzeug geschenkt, ohne sie selbst schreiben zu müssen — man nennt diese Beziehung eine “ist-ein”-Beziehung: Ein Auto IST EIN Fahrzeug (mit zusätzlichen, spezifischeren Eigenschaften). Das ist die wichtigste Faustregel, um zu entscheiden, ob Vererbung überhaupt angebracht ist: Passt die Aussage “X ist ein Y” wirklich, oder wird sie nur konstruiert, um Code wiederzuverwenden?
Eine Unterklasse kann eine geerbte Methode überschreiben (Overriding) — eine eigene Version mit identischer Signatur bereitstellen, die die geerbte ersetzt:
class ElektroAuto extends Fahrzeug {
@Override
void beschleunigen() {
geschwindigkeit += 20; // Elektroautos beschleunigen schneller
}
}Die meisten Sprachen erlauben nur Einfachvererbung (eine Klasse kann nur von EINER Oberklasse erben) — als Ausweg für den Wunsch nach mehreren “Verhaltens-Quellen” dienen Interfaces, von denen eine Klasse mehrere gleichzeitig implementieren kann. Tiefe, verschachtelte Vererbungshierarchien (Klasse erbt von Klasse erbt von Klasse …) gelten heute in vielen Fällen als Design-Warnsignal (“Fragile Base Class Problem”) — Änderungen an einer Oberklasse weit oben in der Hierarchie können unerwartete Nebenwirkungen bei allen tief verschachtelten Unterklassen haben. Als Alternative wird oft “Komposition vor Vererbung” empfohlen: Verhalten durch das Zusammensetzen unabhängiger Objekte erreichen statt durch tiefe Klassenhierarchien.
Siehe auch: Classes, super-Keyword, Polymorphism, OOP