Vererbung lässt eine Klasse von einer anderen abstammen und deren Daten und Methoden übernehmen, ohne sie noch einmal aufzuschreiben.
- Vererbung
Ein Verfahren, bei dem eine Klasse die Daten und Methoden einer anderen übernimmt und um eigene ergänzt.
Beispiel: „Durch Vererbung bringt jeder Blogbeitrag schon mit, was jeder Inhalt gemeinsam hat.“Auch: Ableitung. Die abgebende Klasse heißt Oberklasse oder Elternklasse, die übernehmende Unterklasse oder Kindklasse.
Abgrenzung zur Komposition: Statt zu erben, kann ein Objekt ein anderes als Bestandteil halten. Das ist oft die haltbarere Lösung, weil es sich leichter wieder auseinandernehmen lässt.
Was übernommen wird
Alles, was die Oberklasse hat. Die Unterklasse schreibt nur noch auf, was hinzukommt oder anders sein soll. Eine Methode, die anders laufen muss, wird neu geschrieben und ersetzt damit die geerbte; das heißt Überschreiben.
Innerhalb der überschriebenen Methode lässt sich die ursprüngliche weiterhin aufrufen. So wird die geerbte Regel ergänzt, statt sie ganz zu ersetzen.
class Inhalt {
istSichtbar() {
return this.veroeffentlichtAm <= new Date();
}
}
class Produkt extends Inhalt {
istSichtbar() {
// die geerbte Regel gilt weiter, plus eine eigene
return super.istSichtbar() && this.bestand > 0;
}
}Warum sie mit Vorsicht benutzt wird
Vererbung bindet zwei Klassen fest aneinander. Ändert sich die Oberklasse, ändert sich stillschweigend jede Unterklasse mit. Bei zwei Ebenen ist das überschaubar, bei fünf sucht niemand mehr gern, wo eine Methode eigentlich herkommt.
In unseren über 2.500 Website-Projekten ist eine tiefe Klassenhierarchie ein verlässlicher Hinweis darauf, dass eine Erweiterung länger dauert als gedacht. Die heutige Empfehlung lautet, flach zu bleiben und im Zweifel zusammenzusetzen statt abzuleiten.
Wo sie trotzdem richtig ist
Dort, wo die Beziehung wirklich eine Ist-ein-Beziehung ist. Ein Blogbeitrag ist ein Inhalt, ein Produkt auch. Wo sich das so sagen lässt, trägt die Vererbung; wo nur zufällig Code gemeinsam ist, trägt sie nicht.