8.1 Das Konzept der Vererbung

Die Ziele die mit Vererbung in der objektorientierten Programmierung verfolgt werden sind:

  • Wiederverwendung
    • eine Klasse vererbt Eigenschaften an eine andere.
    • Dies bedeutet: Man nutzt Daten und Methoden einer Klasse 
  • Modellierung in Hierarchien
    • Hierarchien sind gängige Konzepte des Alltagsleben und finden sich in der Begrifflichkeit des Alltagslebens wieder. Eine Modellierung die Hierarchien unterstützt und vereinfacht das Verständnis und die Kommunikation.
    • Hierarchien sind Konzepte die stark bei der Abgrenzung zwischen ähnlichen Dingen helfen

Beispiel einer Vererbungshierarchie:

Klassenhierarchie

Die gleiche Begriffshierarchie lässt sich auch als Mengendiagramm darstellen:

Mengendiagramm

Alle Mitglieder einer Teilmenge haben die gleichen Eigenschaften.

Das Mengendiagramm verdeutlicht, dass es sich bei der Vererbungshierarchie um eine "Ist-ein" Relation handelt.

 Vererbung und Klassen

Die Konzepte der Vererbungshierarchien lässt sich leicht auf Klassen abbilden

  • Unterklassen können von Oberklassen Methoden und Attribute erben und direkt in Ihrer Implementierung benutzen
  • Typischerweise haben Unterklassen nur direkten Zugriff auf öffentliche Methoden und Attribute
  • Unterklassen können selbst zusätzliche Attribute und Methoden implementieren und so spezialisiertere Aufgaben übernehmen
  • Instanzen von Unterklassen müssen sich wie Instanzen der Oberklassen verhalten. Da die Instanzen der Unterklasse immer eine Teilmenge der Instanzen der Oberklasse sind. Sie dürfen jedoch zusätzliche Eigenschaften implementieren

Das Diagramm rechts verdeutlicht die Beziehungen zwischen den Klassen, ihrer Bedeutung und der Typisierung. 

Sub- Supertypbeziehung

Ein- und Mehrfachvererbung

Programmiersprachen wie C++ erlauben die Benutzung von Mehrfachvererbung. Die Sprache Java erlaubt jedoch nur eine einfache Vererbung.

  • Einfachvererbung: Eine Unterklasse erbt von genau einer Oberklasse
  • Mehrfachvererbung: Eine Unterklasse erbt von mehreren Oberklassen

Das Konzept der Mehrfachvererbung durchbricht zu einem gewissen Grad das Konzept der Spezialisierung-Generalisierung. Bei der Einfachvererbung sind Personen Mitarbeiter oder Berater aber nicht beides gleichzeitig. Bei der Mehrfachvererbung mit einer einzelnen Basisklasse werden Unterklassen zuerst als disjunkte Klassen definiert. Später sollen Unter-Unterklassen jedoch die gleichen Eigenschaften über verschieden Vererbungspfade erben.

Anmerkung

Mehrfachvererbung erhöht die Mächtigkeit sowie die Komplexität einer Sprache erheblich. Es kann hier leicht zu Effekten kommen die ein Entwickler nicht als intuitiv empfindet. Das Risiko des Fehlverhaltens einer Anwendung steigt hierdurch.

Beim Entwurf der Sprache Java wurde bewusst auf Mehrfachvererbung verzichtet um die Sprache einfach zu halten und um die Implementierung eines effizienten Laufzeitsystems zu vereinfachen.

Die Java Interface (Schnittstellen) Technologie bietet eine "Hintertür" zur Implementierung von Fällen in denen eine Mehrfachvererbung wünschenswert ist.