Skip to main content

Den Java Vererbungsbaum nach dem Ist-Es-Prinzip richtig entwerfen

Vererbungsbaum in Java – klingt erstmal komisch.
Dennoch wird dies so bezeichnet.

Gemeint sind damit – die einzelnen Hierarchiestufen oder Vererbungsebenen – von der Superklasse bis runter zu den Kindklassen.

Wie sieht das nun konkret aus?
Vererbung bedeutet:
Du definierst einen allgemeinen Typen – zB. Möbel
Und dann implementierst du eine Unterklasse, welche die Oberklasse um bestimmte Attribute und Methoden erweitert.
Zum Beispiel Schrank.

Der Schrank ist ein spezielles Möbelstück und erweitert die Klasse Möbel um zusätzliche Eigenschaften und Methoden.
Je nach Design deines Programmes kannst du unzählige Unterklassen entwickeln.
Zum Beispiel kann auch die Klasse Bett von Möbel erben.
Oder Apothekerschränke erben von der Klasse Schrank.

Du siehst die Möglichkeiten sind wahrscheinlich unbegrenzt.
Doch wie findet man nun die geeignete Oberklasse zu einem bestimmten Objekt?

Wie könnte ein schickes Design in einem ersten Programmentwurf aussehen?

In diesem Beitrag möchte ich dir ein Instrument vorstellen.
Dieses Werkzeug soll dir dabei helfen, Ober- und Unterklassen besser zu trennen.
Es hilft dir außerdem die richtige Abstraktion zu den einzelnen Objekten besser zu verstehen.

Am Anfang ist der ganze Java Vererbungskram etwas verwirrend

Schau dir dieses Bild einmal genauer an!

Java Vererbungsbaum Frau

Nice, oder?
Aber was siehst du?
Ganz Klar – schicke Frau hält ein Glas. Neben ihr steht ein Tisch mit allerlei Zeugs.

Wenn du jetzt ein Java Programm schreiben solltest, welches ein schicke Frau mit Glas simuliert – welche Vererbungshierarchien und Typen würdest du implementieren?

In welchem Verhältnis steht die Frau zum Glas?
Klar sie hält es in der Hand.
Doch wie würde es im Programm aussehen?

Ganz konkret:
Erbt die Klasse Frau von der Klasse Glas?
Oder erbt stattdessen die Klasse Glas von der Klasse Frau?

Na was denkst du?
Ich frage deshalb, weil viele Java Anfänger die tollen Vererbungsfeatures kennenlernen.
Und dann werden Typen gebildet. Es wird munter drauf los vererbt.
Und zum Schluss wird festgestellt, dass die verschiedenen Objekttypen eigentlich gar nicht zu einander passen.

Also dann!
Glas von Frau oder Frau von Glas?

Sorry, aber ich gebe dir in diesem Moment noch keine konkrete Antwort.
Stattdessen lass uns die Antwort doch zusammen finden. 🙂

Beim Java Vererbungsbaum Entwurf – solltest du immer mit einer Frage beginnen.

Die Frage, welche du dir stets stellen solltest, lautet:

„Ist es ein(e)?“

An unserem Beispiel lautet die Frage dann:
Ist die Frau ein Glas?
Oder ist das Glas eine Frau?

Es stimmt natürlich beides nicht.
Somit stehen beide Objekte in keinem Vererbungsverhältnis.

Wenn du jetzt Frauen in einem Java Programm simulieren möchtest, gehst du noch einen Schritt weiter.
Du stellst dir immer die Frage: Ist jede Frau ein…..?

Somit ist klar, dass der Oberbegriff für Frauen nicht Glas ist.
Und natürlich auch niemals sein kann.

Eine Klasse Frau könnte stattdessen von einer Klasse Mensch erben.
Denn hier funktionieren die Fragen:

  • Ist die Frau ein Mensch? – Ja na klar
  • Und ist jede Frau ein Mensch? – Auch dies ist zu bejahen.

Somit ist klar, die Superklasse einer Klasse Frau kann nur Mensch sein.

Wenn du jetzt in einem Java-Programm nur Frauen, welche Sekt trinken – simulierst.
Dann brauchst du die Oberklasse Mensch nicht.

Wenn aber, stattdessen noch smarte Männer in das Programm sollen – Dann macht eine Menschenklasse wieder Sinn.

Hier ein Beispiel und ein bisschen Training zum richtigen Design so eines Java Vererbungsbaumes.

Ich werfe einfach mal ein paar Begriffe rein und lege mal ein mögliches Design fest:

Java Vererbungsbaum Entwurf

  • Superklasse Kühlschrank
  • Kindklasse Eis erbt von der Superklasse
  • Kindklasse Wurst erbt ebenfalls von der Klasse Kühlschrank
  • Und auch die Kindklasse Cola würde erben.

Na wie sieht es aus?
Wer erbt von wem?
Ist dieses Super-Kindklassen-Design so in Ordnung?

Hält dieses Klassendesign der „IST-ES-BEDINGUNG“ stand?
Also dann:

  • Ist Eiscreme ein Kühlschrank?- Oh Gott – NEIN
  • Ist Wurst ein Kühlschrank?- Ebenfalls Nein
  • Ist Cola ein Kühlschrank? – Wieder Nein.

Meine Fragen klingen schon ziemlich blöd, oder?
Dennoch beginnen viele Java Anfänger genau so Klassen zu entwerfen.

Sie sind so überwältigt und begeistert von dieser ganzen Klassenableitung und der damit verbundenen Möglichkeit, dass alles -aber wirklich alles – in einer Vererbungslinie gesetzt wird.

Wie könnte man stattdessen die Klassen entwerfen?

Kühlschrank bleibt Kühlschrank.
Wenn mehr Küchengeräte in das Programm kommen sollen, könnte der Kühlschrank ein spezielles Küchengerät sein.

Und dann könnte der Kühlschrank eine Unterklasse bzw. Kindklasse von Küchengeräte sein.

Java Vererbungsbaum Küchengeräte

Okay, überprüfen wir das Design bis hierher?

  • Ist ein Kühlschrank ein Küchengerät? – ja, na klar.
  • Und ist jeder Kühlschrank ein Küchengerät? – Ebenfalls ja.

Das Design würde also passen.
Ein Kühlschrank könnte somit von der Superklasse „Küchengeräte“ erben.

Wie sieht der Rest aus?
Welcher Sammelbegriff fällt dir zu Eis, Wurst und Cola ein?
Oder gibt es vielleicht kein Sammelbegriff?

Wie wäre es mit Lebensmittel?

Java Vererbungsbaum entwerfen

Überprüfen wir auch das:

  • Ist Eis ein Lebensmittel und ist jede Eiscreme ein Lebensmittel? – Logisch, na klar.
  • Und ist Wurst auch ein Lebensmittel? – Ebenfalls ja.
  • Zu guter Letzt: Ist die Cola ein Lebensmittel? – Ja

Die Superklasse Lebensmittel würde somit ebenfalls für diese drei Kindklassen zutreffen.

Zusammenfassung:

  • Java Vererbung findet nicht automatisch statt, nur weil ein Objekt mit einem anderen Objekt interagieren soll.
  • So ein Java Vererbungsbaum ist stattdessen eine „IST-ES-Beziehung“.
  • Du solltest dir also immer die konkreten Fragen stellen:
    Ist dieses Objekt auch ein Objekt der Superklasse?
    Und ist jedes Objekt auch ein Objekt dieser Superklasse?

Ähnliche Beiträge

So nutzt du das Java Keyword public

Java Keyword public

Java Programme bestehen aus Java Klassen. Und der Zugriff auf eine Java Klasse sollte nach außen immer gewährleistet sein. Was bedeutet das? Du solltest in jeder Klasse die Möglichkeit haben, ein Objekt einer anderen Klasse anzulegen. Gerade durch diese Möglichkeit macht doch das ganze Klassenkonstrukt erst Sinn.

So kannst du Java installieren

Java installieren

Bevor du loslegst und deine ersten Java Programme schreibst, benötigst du die entsprechende Arbeitsumgebung. Du solltest also Java installieren. Und diese Arbeitsumgebung beinhaltet dann Bibliotheken für die einzelnen Java-Standard-Klassen, Dateien um deine Programme auszuführen. Dateien um deine Programme zu packen, Logische Verzeichnisstrukturen

So kannst du Werte aus zwei oder mehreren Java Arrays verrechnen.

Java Arrays verrechnen

Wie kann man Werte aus zwei oder mehreren Java Arrays miteinander verrechnen? Zum Beispiel: Du möchtest alle Werte des ersten Arrays mit allen Werten des zweiten Arrays addieren Oder du möchtest die Summe aus beiden Arrays wissen und erst dann diese miteinander addieren. Was erwartet dich in diesem Beitrag? Zuerst werde ich dir zeigen, wie […]

So kannst du in den Java Klassen Attribute anlegen

Java Klassen Attribute

Die bisherigen Java Klassen in unserem Einführungsbeispiel besitzen noch keine Attribute. Das ändern wir und legen diese jetzt an. In diesem Beitrag erfährst du: Warum Variablen in deinen Klassen eine entscheidende Rolle spielen. Was es bedeutet eine Variable zu deklarieren. Wo du Attribute in den Java Klassen anlegen darfst und wo nicht. Wie du durch […]

Java lernen – 10 nützliche Tipps für Java Anfänger

Java Lernen Anfänger

Wenn du die Programmiersprache Java lernen möchtest, bist du hier prinzipiell erst einmal richtig. Und wenn du es wirklich ernst meinst und in die Java Programmierung einsteigen möchtest, solltest du auch meinen kostenlosen Java Kurs beanspruchen. Wenn du dabei bist, bekommst du: Eine Lektion pro Woche zu den Basics. Hier geht es um die ersten […]

Java Übung: Alles beginnt mit Hello World

Java Übung Hello World

Alles beginnt mit „Hello World“. Sämtliche Java Bücher beginnen mit diesem ersten Beispiel. Auch die Java Übungen sollen mit diesem ersten Programm starten. Definiere eine Klasse „Hello World“. Implementiere die Main Methode. Die Main Methode soll bei Programmaufruf die Bildschirmanzeige „Hallo Welt“ zurückgeben. Die Lösung zur Java Übung „Hallo Welt“ public class HelloWorld{ public static […]

Java Polymorphie – besserer Code und mehr Möglichkeiten

Java Polymorphie Vorteile

Polymorphie ist das Herzstück jeder objektorientierten Sprache. Nicht nur in Java – auch in Python, Javascript und in anderen Sprachen. Aber was bedeutet Polymorphie eigentlich? Polymorphie oder auch Polymorphismus genannt, kommt aus dem Griechischen. Es bedeutet Vielgestaltigkeit. Etwas freier übersetzt, kannst du es auch als Facettenreichtum bezeichnen. Im Grunde genommen zielt die ganze Java Vererbung […]

Nutze die richtigen Methoden zum Java Lernen

Java lernen Methoden

Ich lernte die Java Programmierung auf die klassische Art. Ich kaufte mir das erste Buch und los ging es. „Jetzt wirst du Java lernen“ – sagte ich zu mir. Ich war relativ schnell ziemlich frustriert, denn irgendwie fehlten mir ein paar Zusammenhänge. Kennst du das? Du hast ein Wissensfetzen und noch einen. Aber das Wichtigste. […]