Suchen

Definition „Inheritance (Programmierung)“ Was ist Vererbung in der OOP?

Autor / Redakteur: Egoloizos / Stephan Augsten

Die Vererbung dient in der objektorientierten Programmierung, kurz OOP, unter anderem dazu, eine neue Klasse als Erweiterung bereits existierender Klassen zu entwickeln. Die bestehende Klasse ist als Basis- oder Superklasse bekannt. Die neue, erbende Klasse nennt sich Subklasse.

Firma zum Thema

Vererbung ist ein elementares Konzept der objektorientierten Programmierung.
Vererbung ist ein elementares Konzept der objektorientierten Programmierung.
(© bakhtiarzein - stock.adobe.com)

In der objektorientierten Programmierung und Anwendungsentwicklung ist die Vererbung als Vorgehensweise zu begreifen, in der eine Klasse die Mitglieder einer anderen Klasse übernimmt. Zu den übernommenen Eigenschaften gehören Attribute, Methoden sowie Ereignisse.

Bei der Vererbung wird eine neue Klasse oder Subklasse als Erweiterung einer oder mehrerer bereits bestehender Klassen (Superklassen) entwickelt. Das Ziel der Vererbung besteht also in der Wiederverwendung der übergeordneten Klassen-Eigenschaften.

Mit der Vorgehensweise der Vererbung ist es möglich, die mehreren Klassen gemeinsamen Attribute, Methoden und Ereignisse an zentraler Stelle festzulegen und zu definieren. Bereits definierte Eigenschaften einer Klasse sollen nicht erneut definiert werden müssen. Dies gilt insbesondere, wenn sich Klassen bereits sehr ähnlich sind.

Funktionsweise und Vererbungsstruktur

Beteiligt sind an der Vererbung grundsätzlich zwei Klassen, für die mehrere Bezeichnungen existieren. Die vererbende Klasse ist auch als Oberklasse, Superklasse oder Elternklasse bekannt. Die erbende Klasse kennt die Bezeichnungen abgeleitete Klasse, Unterklasse, Subklasse oder Kinderklasse. In der Vererbungsstruktur können Subklassen ihrerseits Oberklassen für andere nachgelagerte abgeleitete Klassen sein.

Die sich ergebende Vererbungshierarchie wird auch Klassenhierarchie genannt. Sie lässt sich visuell in einer baumartigen Struktur darstellen, die als Vererbungs- oder Klassendiagramm bekannt ist. Ein Spezialfall der Vererbung ist die Mehrfachvererbung. In einem solchen Fall besitzen Klassen mehrere Elternklassen.

Typischerweise findet Vererbung in der Art und Weise Einsatz, dass die gebildeten Unterklassen spezifischere Fähigkeiten haben als ihre jeweiligen Elternklassen. Das Ableiten einer Klasse ist daher ein Prozess, der auch als Spezialisierung bekannt ist. Die übergeordnete Klasse beinhaltet Eigenschaften und Fähigkeiten, die von sämtlichen Unterklassen genutzt werden können. Darauf aufbauend sind die Unterklassen auf weitere Fähigkeiten spezialisiert.

Jede abgeleitete Klasse kann Superklasse weiterer Unterklassen sein, die ihrerseits eigene Spezialisierungen aufweisen. Manche Programmiersprachen sehen in dieser Vererbungsstruktur Ausnahmen vor, die eine weitere Ableitung verhindern. In diesem Fall ist vom Ende der Klassenhierarchie die Rede.

Unterschiede und Abgrenzung

Grundsätzlich ist zwischen der Einfach- und der Mehrfachvererbung zu unterscheiden. Die Einfachvererbung sieht vor, dass zu jeder Klasse genau eine Superklasse gehören. Im Falle der Mehrfachvererbung sind mehrere Superklassen pro Unterklasse möglich.

Die Mehrfachvererbung ist bei moderneren Programmiersprachen wie etwa Java oder C# (C-Sharp) meist nicht vorgesehen. Dies hängt damit zusammen, dass der Nutzen der Mehrfachvererbung in Anbetracht der damit verbundenen Probleme ein meist geringer ist. Eine Programmiersprache, die Unterstützung für die Mehrfachvererbung bietet, ist C++.

Wiederholte Vererbung ist der Vorgang des mehrfachen Erbens gleicher Merkmale auf Basis einer mehrfachen Elternklasse. Die Eigenschaften einer mehrfachen Superklasse können in Abhängigkeit der Vererbungs-Semantik in den abgeleiteten Klassen ebenso mehrfach vorhanden sein. Die daraus resultierende ebenso mehrfache Nutzung der Namen der Eigenschaften der Superklassen und Unterklassen kann bei der wiederholten Vererbung zu Konflikten führen.

Anwendungsfälle der Vererbung in der Entwicklung

In der Anwendungsentwicklung wird durch Vererbung eine Modellierung möglich, die der menschlichen Vorstellung möglichst nahe kommen soll. Die Vererbungsstruktur kennt verschiedenartige Anwendungsszenarien.

Ein häufig zum Einsatz kommender Vererbungsfall ist die Subtyp-Vererbung. Die abgeleitete Klasse bildet dabei einen Subtypen der Superklasse. Es handelt sich um einen abstrakten Datentyp, bei dem ein Objekt des Subtyps grundsätzlich an jeder Stelle angewandt werden kann, wo ein Objekt des Basistyps zu erwarten ist. Hierbei ist die Menge der Ausprägungen des abgeleiteten Subtyps eine Teilmenge der Menge der Ausprägungen des Basistyps.

Ein weiterer Fall der Vererbung ist die Unterstützung allgemeiner Basisfähigkeiten. Rein formal handelt es sich um einen Spezialfall der Subtyp-Vererbung. Hierbei geht es um Etablierung der Unterstützung grundlegender Funktionalitäten der Klassenbibliothek oder Anwendungsarchitektur. Funktionalitäten wie Vergleichbarkeit (Bezeichner "Comparable") oder Serialisierbarkeit (Bezeichner "Serializable") werden deklariert durch eine abstrakte Klasse oder Schnittstelle. Die Implementierung der Anforderungen der Schnittstelle erfolgt in der abgeleiteten Klasse.

Vererbungsstrukturen können sich auch auf Standard-Implementierungen beziehen. Hierbei geht es um die Implementierung allgemeiner Funktionalitäten in zentralen Klassen. Diese Funktionalitäten sind für mehrere Typen verwendbar und dient der pragmatischen Wiederverwendung allgemein gehaltener Programmbestandteile.

Ein weiterer Anwendungsfall ist die Vererbung zur Funktionserweiterung. Hierbei werden in der Subklasse neue Funktionalitäten hinzugefügt, die die Basisfunktionen der Superklasse ergänzen. Die Erweiterung beinhaltet zusätzliche Attribute. Bei dieser Vererbungsvariante geht es ebenso um Anpassungen durch das Überschreiben von Methoden. Auf diese Weise lassen sich Funktionalitäten hinzufügen oder ergänzen, die in der Superklasse keine Rolle spielen.

Diese Vererbungsstruktur berücksichtigt ebenso den Fall, dass die Funktionalität einer bestimmten Klasse nur teilweise in der abgeleiteten Klasse implementiert wird. In diesem Falle handelt es sich bei Superklasse und abgeleiteter Klasse um abstrakte Klassen. Zusätzliche Implementationen sind in diesem Fall der Gegenstand weiterer Spezialisierungen.

(ID:46803236)