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 Übung 21 – Bestimme die Anzahl der Tage

Java Übung Tage

In dieser Java Übung möchte ich, dass du eine Methode schreibst, welche zwei Zahlen entgegennimmt. Und zwar soll die erste Zahl das Jahr sein. Die zweite Zahl soll eine Monatsangabe (1-12) repräsentieren. Was soll die Methode dann machen? Die Methode soll dir die Anzahl der Tage des jeweiligen Monats zurückgeben. Achte auf Schaltjahre.

Ein Java Fenster erzeugen mit dem JFrame

Java-Fenster-erzeugen

Ein Java Fenster erzeugen mit Swing. Java Swing – was ist das? Zum Erstellen von grafischen Benutzeroberflächen, kurz GUI, bietet Java eine eigene Standardklasse an. Diese Klasse nennt sich Swing. Aus dieser Swing-Klasse heraus können Objekte erstellt werden. Diese Objekte lassen sich in vier verschiedene Kategorien einteilen. Fenster und Dialoge bilden das Grundgerüst einer grafischen […]

Nutze die Fernbedienung für deine Java Objekte

Auf Java Objekte greifst du mit einer Art Fernsteuerung zu. Diese bezeichnet man als Referenz oder als Verweis. Und diese Referenzvariablen möchte ich dir jetzt einmal vorstellen. Doch bevor wir loslegen, lass mich noch ein paar Dinge loswerden. 🙂 Ich habe es ja schon einmal in einem früheren Beitrag erwähnt. Java unterscheidet zwischen primitiven und […]

Lassen wir Java rechnen – Die Rechenoperationen für Variablen

Java rechnen

Ich liebe Mathe. In der Biographie „Der Mann, der die Zahlen liebte“, stellt Paul Hoffmann das Mathematikgenie Paul Erdös vor. Erdös war eines der größten Genies des 20 Jahrhunderts. Er arbeitete mit zahlreichen Wissenschaftlern zusammen und verfasste durchschnittlich mehr Publikationen im Jahr, als andere Mathematiker im ganzen Leben. Da Erdös sich mit sehr vielen Theoremen […]

So kannst du Java Arrays mit for Schleife füllen und auslesen

Java Arrays For Schleife

Wir haben in einem anderen Beitrag bereits über Java Arrays gesprochen. So ein Array speichert Zahlen, Texte oder Objekte in eine Art Liste. Und dann kannst du ganz bequem über den Index das Array füllen und die bereits enthaltenen Werte abrufen. Ganz bequem? So, wie ich dich aus dem letzten Beitrag entlassen habe, war das […]

Java Übung 19 – Zähle die Kommastellen

Java Übung Kommastellen Zählen

In dieser Java Übung möchte ich, dass du eine Methode zum Zählen von Kommastellen schreibst. Lege dazu eine Klasse „KommaZahl“ an. Diese Klasse enthält die statische Methode „zaehleKommaStellen“, welche eine Kommazahl als übergebenen Parameter erwartet.

Von Java Klassen zum Java Programm – Der Programmstart

Java Klassen ausführen

In den letzten Beiträgen hast du gelernt, wie Java Klassen erstellt werden und aufgebaut sind. In diesem Beitrag geht es um den Programmstart. Ich will dir zeigen, was nötig ist, dass du ein Java Programm ausführen kannst. Und ich zeige dir außerdem, wie du eine Startklasse in einem x-beliebigen Javaprogramm anlegst. Wie auch schon zuvor, […]

10 ganz nützlichen Feature der Klasse Java Math

In diesem Beitrag geht es um eine spezielle Java Klasse. Die Klasse nennt sich Java Math. Diese ist in der Standardbibliothek von Java enthalten. Warum solltest du diese Klasse kennen? Die Math Klasse bietet dir einen Menge Methoden an, welche zur Berechnung von mathematischen Gleichungen ganz hilfreich sind. Aber auch für Nichtmathematiker ist etwas dabei. […]

So kannst du Java Konstruktoren anlegen und überladen

Java Konstruktoren

Der Name sagt es schon. Java Konstruktoren konstruieren oder bauen Java Objekte. Und diese Objekte baut der Konstruktor auf Vorlage der entsprechenden Java Klasse. In diesem Beitrag zeige ich dir natürlich verschiedene Ansätze wie du den Konstruktor einsetzt. Ich zeige dir dies Schritt für Schritt. Dabei zeige ich dir auch verschiedene Dinge, welche nicht funktionieren. […]

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

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