Was ist Vererbung?

In diesem Kapitel werden wir genauer auf die Vererbung von Klassen in Java eingehen. Bevor wir damit anfangen müssen wir erstmal überlegen was Vererbung für uns selber heißt. Mit dem Wort Vererbung verbinden wir die Hinterlassenschaften von unseren Angehörigen in der Familie. Allein in Deutschland werden laut einer Studie jährlich 400 Milliarden Euro vererbt. Das ist eine stolze Summe, die eine steigende Tendenz Jahr für Jahr aufzeigt. Aber nun beenden wir den Exkurs wieder und kehren zur Vererbung in Java zurück.

In Java wird logischerweise niemand versterben oder geld zurücklassen, da es in Java ja nur Klassen, Methoden und Objekte etc. gibt. In Java ist die Vererbung eine spezielle Art, neue Klassen basierend auf bereits bestehenden Klassen zu definieren. Die Vererbung wird durch das Schlüsselwort “extends” in Java ausgelöst. Die Klasse die hinter “extends” steht ist also die Mutterklasse oder Elternklasse. Die neue Tochterklasse übernimmt oder erweitert die bereits bestehenden Eigenschaften oder Verhaltensweisen (z.B. Methoden, Variablen) ihrer Mutterklasse. Die Tochterklasse wird also von der Mutterklasse abgeleitet, in Java spricht man dann von einer Subklasse.

Ein Beispiel aus der Praxis

Ein Anwendungsbeispiel für Vererbung findet sich an Universitäten, wenn man alle Menschen dort in einem Personalsystem erfassen möchte. Es gibt Dozenten, Angestellte, Studenten und Besucher. Alle diese Personengruppen haben gemeinsame Daten die in dem Personalsystem erfasst werden sollen wie der Vorname, Nachname und die Zeit wann sie an der Universität waren. Diese Attribute fassen wir in der Superklasse Personen zusammen. Wenn wir einen Studenten jetzt genauer beschreiben möchten lassen wir die Klasse Student von Personen erben und sparen uns damit diese Attribute erneut zu definieren.

Die Klasse von der sich die Tochterklasse ableitet wird in Java automatisch zur Superklasse. Die Tochterklasse muss durch die Vererbung der Eigenschaften und Verhaltensweisen nur noch eigene Eigenschaften oder Verhaltensweisen durch den Entwickler zugeschrieben bekommen, die sie klar von der Superklasse unterscheiden und somit einzigartig machen. Die Tochterklasse ist also eine Spezialisierung der Mutterklasse. Somit ist auch im Umkehrschluss eine Standardisierung zu sehen in Richtung der Superklasse / Mutterklasse in einer solchen Klassenhierarchie.

Nun fragst du dich sicher wie man das in Java umsetzt. In Java gibt es neben public, private und protected noch viele andere Modifikatoren. Die Bedingung für die Vererbung in Java ist immer, dass der Modifikator der Tochterklasse nicht privater sein darf als die Mutter. In den meisten Fällen bleiben hierbei nur noch Public und Abstract übrig. Nun ist die Frage was ist abstract ? Unter dem Modifikator Abstract versteht man in Java eine Klasse deren Methoden und Attribute nicht komplett oder nur teilweise implementiert / überschrieben werden. In abstrakten Klassen lassen sich also die Methoden und Attribute der Töchter überschreiben oder nur teilweise implementieren bei einer Vererbung. Aus diesem Grund ist es immmer wichtig zu wissen welchen Modifikator die jeweilige Mutterklasse hat, um den Modifikator der Tochterklasse auch richtig zu verwenden. Nun werden wir dir die Vererbung in Java zeigen:

Dynamische Polymorphie

Wenn wir auf Attribute oder Methoden der Superklasse zugreifen möchten, geht das mit dem Schlüsselwort super. Damit lässt sich auf sichtbare (Sichtbarkeit PUBLIC oder PROTECTED) Methoden und Attribute der Superklasse zugreifen. Soll die Methode komplett neu geschrieben werden, ist das auch möglich, indem die gleiche Signatur der zu überschreibenden Methode verwendet wird. Das führt dazu, dass wenn die Methode der Subklasse aufgerufen wird, ein komplett anderes Verhalten als die Superklasse hat. Passiert das während der Laufzeit des Programmes wird es dynamische Polymorphie genannt.