EMZETT.
Login

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