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

Overriding und Vererbung – So lassen sich Java Methoden überschreiben

Java Methoden überschreiben

In Deutschland entstehen jeden Tag tolle Geschichten. So wie diese hier…. Die größte Turmuhr der Welt, die Makkah Clock, steht in Saudi – Arabien. Und zwar direkt in Mekka. Hier ein paar Eckdaten zur Uhr: Höhe des Turmes 601 m. Das Ziffernblatt der Turmuhr hat einen Durchmesser von 43 Meter Die Länge des Minutenzeigers beträgt […]

Die mathematischen Grundlagen des Dezimalsystems für Java Programmierer

Java Dezimalsystem Mathematik Programmierer

Bei der Java Programmierung benötigst du Kenntnisse über das Dezimalsystem. Allein schon für die technische Umsetzung beim Runden einer Zahl. Oder du möchtest den Kehrwert bzw. den Umkehrwert einer Zahl im Programm bestimmen lassen. Aber auch für das Herausfinden des Stellenwertes – also wieviel Stellen hat eine Zahl – benötigst du das Grundwissen des Dezimalsystems. […]

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

So nutzt du Methoden aus der Java String Klasse

Java Strings Methoden

In einen der letzten Beiträge haben wir darüber gesprochen, dass Java Strings – Objekte sind. Dass Strings in allen Programmen äußerst häufig vorkommen Und dass sich deshalb Referenzvariablen String-Objekte im String Pool teilen. Das Konzept hinter dem String-Pool ist die Teilung der Ressourcen. Und das bedeutet: Weniger Objekte – mehr Speicher Mehr Speicher – bessere […]

So kannst du Instanzen in Java Klassen zählen

Wie kannst du die Instanzen der Java Klassen zählen? Ganz einfach. Am besten ist es, wir bleiben beim Einführungsbeispiel zu den Java Klassen. Und ich wähle die Klasse „Monster“. Um es einfach zu halten, soll auch der Programmstart durch die Klasse erfolgen. Die Klasse bietet somit eine main-Methode an.

Das Instanzieren von Java Klassen verhindern

Java Objekte Instanzieren verhindern

Die Instanzierung von Java Klassen verhindern. Was heißt das? Instanzen sind die Objekte einer Java Klasse. Und Instanzieren oder Instanzierung heißt nichts anderes, als Objekterstellung. Aber was soll das? Oder mal anders gefragt: Wieso sollte man verhindern, dass eine Java Klasse – Objekte erstellen kann? Schließlich sind doch Objekte der Sinn und Zweck jeder objektorientierten […]

So verwendest du die Java Codeblöcke zur Automatisierung

Java Codeblöcke

In diesem Beitrag geht es um den Einsatz von Java Codeblöcken oder Initialisierungsblöcken. Viele Wege führen nach Rom. Oder Alle Wege führen nach Rom. Heißt es in einem alten Sprichwort. Und so ähnlich ist es bei der Java Programmierung. In diesem Beitrag möchte ich dir einen weiteren Weg vorstellen, wie du Variablen eines Java Objektes […]

So kannst du gelöschte Java Projekte oder Dateien in Eclipse wieder herstellen

Wahrscheinlich passiert es jedem einmal, dass man versehentlich Dateien löscht. Und dann? Die Wut ist riesig, weil man ja alles nochmal schreiben muss. In Eclipse hast du die Möglichkeit sämtliche Dateien wieder herzustellen. In diesem Beitrag möchte ich dir demonstrieren, wie du gelöschte Java Klassen, Dateien, Projekte oder Packages wieder herstellen kannst.

So lassen sich Java Arrays kopieren

Java Arrays kopieren

Java Arrays kopieren oder klonen…. Was heißt das eigentlich? Eine Kopie ist eine Reproduktion bzw. die Nachbildung eines Originals. Somit ist jede Fotographie – die Abbildung einer bestimmten optischen Wirklichkeit, zu einem festen Zeitpunkt. Die Kopie einer Buchseite ist das optische Abbild dieser spezifischen Buchseite – auch zu einem festen Zeitpunkt. Wichtig in diesem Zusammenhang […]

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 verwendest du Inkrement und Dekrement Operatoren in deinen Java Programmen

Java Operatoren

In diesem Beitrag geht es um Java Operatoren. Ich möchte dir gern zwei neue Operatoren vorstellen. Diese nennen sich Inkrement und Dekrement. Ja was heißt das? Inkrementieren bedeutet eine schrittweise Erhöhung einer Zahl. Und dementsprechend bedeutet Dekrementieren: Die schrittweise Verminderung einer Zahl. Wozu brauchst du das? Stell dir vor. Du bekommst eine Liste mit Namen […]

Verwalte deine Java Klassen in packages

java klassen verwalten

Es macht durchaus Sinn deine Java Klassen in verschiedenen Paketen zu organisieren. Wieso? Es sprechen mehrere Gründe dafür: Du kannst doppelte Klassennamen verwenden Du kannst deinen Code oder deine Klassen inhaltlich trennen Du kannst Hierarchien abbilden. Und genau um diese Dinge geht es in diesem Beitrag