Vererbung in Java

Vererbung in Java

Die Generalisierung bezeichnet in der objektorientierten Programmierung den Abstraktionsprozess von einzelnen Klassen hin zu einer Oberklasse (auch Mutterklasse oder Elternklasse), welche gemeinsame Merkmale und Funktionalitäten der Unterklassen (auch Tochterklassen oder Kindklassen) enthält. Sie ist eine Richtung der Vererbung und das Gegenteil zur Spezialisierung.

Die Spezialisierung bezeichnet in der objektorientierten Programmierung die Erstellung von Unterklassen, welche Merkmale und Funktionalitäten der Oberklasse besitzen, diese aber zusätzlich um speziellere Klassenattribute und Methoden erweitern. Sie ist eine Richtung der Vererbung und das Gegenteil zur Generalisierung.


Erklärung

Die Vererbung ist ein essenzielles Kapitel der Objektorientierung. Sie beschreibt dabei die Möglichkeit, Eigenschaften und Klassenmethoden aus anderen Klassen zu nutzen, ohne diese für jede erbende Klasse neu implementieren zu müssen. Die dadurch vermiedene Redundanz ist eines der wichtigsten Grundparadigmen guter Programmierung. Des Weiteren ermöglicht Vererbung später Polymorphie, welche weitere Möglichkeiten zur Speicherung von Objekten mit sich bringt.

Generalisierung

Die Generalisierung als eine Richtung der Vererbung ist eines der grundlegenden Konzepte der Objektorientierung. Ziel eines jeden Programms sollte es sein, Redundanz bei Klassenattributen und Methoden zu vermeiden.

Ein Beispiel: Sowohl ein Dackel, als auch ein Pudel haben gemeinsame Eigenschaften. Beide haben vier Pfoten, tragen einen Namen, haben ein Alter, können etwas fressen und gestreichelt werden. Sowohl der Dackel als auch der Pudel sind Hunde.

Die Generalisierung beschreibt dabei den Abstraktionsprozess von einer speziellen Klasse. Im Beispiel wäre das von Pudel und Dackel hin zu einer generelleren Klasse: dem Hund.

Die drei Hunde

Du suchst also immer nach Gemeinsamkeiten der Unterklassen, welche dann in eine Oberklasse ausgelagert werden.

Spezialisierung

Die Spezialisierung beschreibt die Gegenrichtung zur Generalisierung. Objekte von Unterklassen werden spezieller, behalten jedoch die Eigenschaften der Oberklasse. Die Unterklassen können durchaus sehr verschiedene Eigenschaften und Methoden besitzen und müssen miteinander nicht mehr vergleichbar sein.

Spezialiserung. Die einzelnen Unterklassen werden zur Oberklasse zusammengefügt

Ein Beispiel: Ein Hund, eine Katze und ein Eisbär sind alles Unterklassen der Oberklasse Säugetiere. Sie haben jedoch an sich sehr spezielle Eigenschaften und Methoden, die sie voneinander unterscheiden. Um dies zu implementieren, wird die Spezialisierung verwendet.

Während die Methode geraeuscheMachen() auf einem Hund-Objekt später wohl eine Art "Wuff" ausgeben wird, enthält derselbe Aufruf auf dem Katzenobjekt ein "Miau". Obwohl die Objekte also Gemeinsamkeiten haben (alle drei sind Säugetiere und können Geräusche machen), liefert die Methode ganz unterschiedliche Ergebnisse.

Implementierung durch extends

Um Vererbung in Java zu implementieren, wird das Stichwort extends verwendet. Extends (auf Deutsch erweitert) wird in der Klassendefinition der Unterklassen verwendet, um zu definieren, dass diese Klassen eine Oberklasse erweitern.

Ein Beispiel: Wenn wieder die Hunde-Klassen in Java umgesetzt werden sollen, dann könnte eine mögliche (sehr abstrakte) Implementierung so aussehen:

Die Klasse Dog implementiert dabei die Oberklasse Hund. Sie beinhaltet die Klassenattribute, wie Alter und Name, die sich alle Hunde teilen. Des Weiteren gibt es das Klassenattribut wouldFitInAHotdog, welches angibt, ob der Hund aufgrund seiner Form in einen Hotdog passen würde.

Hier versteckt sich noch mehr!
Besuche die App, um alle Inhalte zu sehen!

Die Klasse Dachshund (auf Deutsch Dackel) ist eine Unterklasse der Oberklasse Dog. Deshalb trägt sie in der Klassendefinition den Zusatz extends Dog.

Im Konstruktor der Klasse werden dann der Name und das Alter in Klassenattributen gespeichert, die in der Klasse Dachshund selbst aber nicht mehr definiert wurden! Durch extends Dog erbt die Unterklasse die Klassenattribute von der Oberklasse.

Hier versteckt sich noch mehr!
Besuche die App, um alle Inhalte zu sehen!

Selbiges gilt für die Klasse Poodle (auf Deutsch Pudel). Diese ist eine Unterklasse der Oberklasse Dog. Deshalb trägt sie in der Klassendefinition den Zusatz extends Dog.

Im Konstruktor der Klasse werden dann der Name und das Alter in Klassenattributen gespeichert, die in der Klasse Poodle selbst aber nicht mehr definiert wurden! Durch extends Dog erbt die Unterklasse die Klassenattribute von der Oberklasse.

Hier versteckt sich noch mehr!
Besuche die App, um alle Inhalte zu sehen!

Der Aufruf von wouldFitInAHotdog() liefert auf einem Objekt der Klasse Poodle das Ergebnis false.

Der selbe Aufruf von wouldFitInAHotdog() liefert auf einem Objekt der Klasse Dachshund das Ergebnis true! Nicht umsonst trägt der Dachshund im Englischen den Spitznamen "Wiener".


Fun Fact

Unterklassen können selbstverständlich wiederum Unterklassen besitzen! Dabei würde die Unterklasse zur Oberklasse werden und die neue Unterklasse dann diese neue Oberklasse erweitern.

Ein mögliches Beispiel hierfür wäre die Oberklasse Geometrische Form, welche dann als Unterklassen Viereck, Kreis, Dreieck etc. haben könnte. Die Unterklasse Viereck könnte wieder Unterklassen haben, zum Beispiel Raute, Drachen und so weiter.

No items found.

simpleclub ist am besten in der App.

Mit unserer App hast du immer und überall Zugriff auf: Lernvideos, Erklärungen mit interaktiven Animationen, Übungsaufgaben, Karteikarten, individuelle Lernpläne uvm.

Jetzt simpleclub Azubi holen!

Mit simpleclub Azubi bekommst du Vollzugang zur App: Wir bereiten dich in deiner Ausbildung optimal auf deine Prüfungen in der Berufsschule vor. Von Ausbilder*innen empfohlen.

Jetzt simpleclub Azubi holen