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

Java For Each Schleife – Aufbau und Funktionsweise

Java for each Schleife

In einer anderen Lektion habe ich dir bereits gezeigt, wie du ein Java Array mit einer for-Schleife füllen und dir später die Werte zurückgeben lassen kannst. Es gibt allerdings einen weiteren Schleifentyp, welche geradezu prädestiniert ist für Java Arrays. Dieser Schleifentyp nennt sich for each Schleife. In diesem Beitrag möchte ich dir zeigen, wie du […]

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 […]

Java Übung 16 – Bestimme den größten gemeinsamen Teiler

Java Übung Teiler

In dieser Java Übung möchte ich, dass du den größten gemeinsamen Teiler zwei Zahlen ermittelst. Ich möchte, dass du das Ganze mit einer while-Schleife umsetzt. Und wie? Du legst eine neue Klasse „GGT“ (größter gemeinsamer Teiler) an. In diese Klasse implementierst du eine Klassenmethode „berechneGGT“. Diese erwartet zwei Argumente vom Datentyp Integer.

Das Java Leben ist einfacher mit For-Schleife

Java For Schleife Aufbau

In einem anderen Artikeln habe ich bereits über Schleifen in Java gesprochen. In diesem Artikel möchte ich dir eine ganz besondere Schleife vorstellen. Warum ist diese so toll? Sie hat einen integrierten Schleifenzähler. Die Schleife zählt also bei jedem Durchlauf automatisch mit. Aber dazu gleich mehr…. Lass uns einmal so eine For Schleife anlegen.

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 […]

Java Vererbung:
Die 3 Schablonen für deine Java Objekte

Java Vererbung Beispiel

Im letzten Beitrag habe ich dir das Java Vererbung Konzept an einem Beispiel vorgestellt. In dem Beispiel-Rollenspiel gab es Klassen zu Helden und Superhelden. Ich habe dir die Vererbungshierarchien theoretisch erläutert. Jetzt geht es ans Praktische. In diesen Beitrag lernst du: Wie du bestehende Java Klassen erweiterst Wie du Objekte aus den erweiterten Klassen erstellen […]

So nutzt du die While Schleife in deinem Java Programm

Java While Schleife

Manchmal ist es wichtig, Dinge einmal öfter zu tun. Bei der Java Programmierung kann es schonmal sein, dass du einen Code mehrfach ausführen lassen musst. Zum Beispiel die Zahlen eins bis zehn. Ein Java Programm, welches die Zahlen eins bis zehn wiedergibt. Na wie wäre das? Der Java Code dazu würde so aussehen: public class […]