Skip to main content

Java Vererbung findet auch zwischen Einkaufstüten und Polizeiautos statt

„Manchmal findet Java Vererbung auch zwischen Einkaufstüten und Polizeiautos statt“

Irrer Titel, oder?

Aber mal Hand aufs Herz.
Was haben eigentlich eine Einkaufstüte und ein Polizeiwagen gemeinsam?

Ich verrate dir etwas:

Du kannst die Verbindung nicht erkennen, denn ich habe dir nicht alles verraten.

Es fehlt noch ein wichtiger Aspekt – eine Verbindung zwischen beiden.

Und zwar.
Ein ausgewachsener Mann im Rentierkostüm.

Java Vererbung am Beispiel

Und macht es jetzt Klick?

Bei der Java Vererbung geht es um die Vermeidung von doppelten Code.

Spaß beiseite.

Stell dir einmal vor:

  • Du entwirfst ein Java Programm.
  • Und in diesem Programm gibt es Figuren – einfache 2D-Figuren.
  • Diese Figuren sind dann eine Einkaufstüte, ein Polizeiauto und das Rentier.

Alle Figuren sollen lediglich rotieren.
Mehr sollen diese Figuren nicht tun.

Java Vererbung Rotieren

Natürlich könntest du jetzt drei Klassen anbieten und in jeder Klasse eine separate rotieren-Methode.
Java-Vererbung-doppelten-Code-vermeiden

Oder du erstellst eine Klasse, welche diese eine Methode anbietet.
Und alle anderen Klassen erben diese Methode von der Superklasse.
Java Vererbung Methode Beispiel rotieren

Vererbung findet immer dort statt, wo Objekte das Gleiche tun müssen.

Stichwort ist redundanter Code.
Und dieser redundante oder doppelte Code ist etwas sehr schlechtes.

Denn nehmen wir einmal an.
Irgendwann sagst du: „Dieses Rotationsprogramm ist mir zu langweilig.
Ich möchte, dass die Figuren beim Rotieren auch noch Aufblinken.“

Ohne Vererbung müsstest du in alle drei Klassen eine aufblinken()-Methode hinzufügen.
Mit Vererbung gehst du in die Superklasse, schreibst einmal die aufblinken()-Methode hinein und schon blinken alle deine Figuren beim Rotieren auf.

Java Vererbung blinken Methode

Gelb ist nicht ganz dein Geschmack, oder?
Du möchtest vielleicht noch, die Aufblinkfarbe von Gelb in Grün abändern.
Na klar, also nochmal rein in die Superklasse.
Einmalig die Aufblinkmethode abändern.
Und schon blinken alle Figuren grün statt gelb.

Kurzum:
Vererbung macht dir das Leben als Entwickler extrem einfach.
Der Code ist leichter zu erstellen und vor allen Dingen besser zu warten.

Vererbung folgt immer dem IST-ES-Prinzip.

Du solltest dich bei jeder Klasse, welche du in eine Vererbungslinie setzen möchtest immer fragen:

„Ist dieses Objekt ein spezielleres Objekt der Superklasse?“

Am Beispiel der rotierenden Figuren fragst du dann:

  • Ist das Polizeiauto eine rotierende Figur? – Ja in diesem „Rotieren-Programm“ schon.
  • Und sind die Einkaufstüte und das Rentier ebenfalls rotierende Figuren?- Für dieses Rotieren-Programm kannst du dies ebenfalls bejahen.

Somit können alle drei Klassen von der Superklasse „Rotierende Figuren“ sorglos erben.

Natürlich muss zur Vererbung immer der Kontext passen.

Das Konzept macht nur Sinn, wenn es auch wirklich in das Programm passt.
Schau dir dieses Bild einmal an.

Java Vererbung Rennsimulation

Dies könnte ein Rennsimulator sein.
Der Mann im Rentierkostüm ist jetzt als Zuschauer des Rennens geplant.

Meine Frage an Dich:
Können in dieser Rennsimulation das Rennauto und das Rentier eine Vererbungslinie bilden?

Na was denkst du?
Das Auto kann sich überschlagen (rotieren) und der Mann ebenfalls.

Es gibt also Gemeinsamkeiten.
Macht Vererbung hier Sinn?

Nein natürlich nicht.
Denn wie soll die Superklasse heißen?
Der Name „Rotierende Figuren“ passt hier nicht mehr.
Denn das eine Objekt ist ein Rennauto, welches fahren, lenken, beschleunigen auch noch zufällig rotieren kann.
Und das andere Objekt wäre ein Zuschauer, welcher winken, sich freuen, lächeln auch noch rotieren könnte.

Falls du beide in eine Vererbungslinie setzen würdest, könnte der Zuschauer ebenfalls beschleunigen, lenken usw.
Und das Auto könnte winken und lächeln. 🙂

Also absoluter Blödsinn in so einem Programm.
Mit der „IST-ES-EIN-Frage“ kommst du auf jeden Fall darauf:

  • Ist der Zuschauer ein Auto? – Blödsinn
  • Ist das Auto ein Zuschauer – ebenfalls Schwachsinn.

Es gibt in so einem Programm keine gemeinsame Vererbungslinie, obwohl beide Objekte vielleicht die gleiche Methode haben. (Möglichkeit zum Rotieren)

Zusammenfassung:

  • Durch die Java Vererbung vermeidest du doppelten und redundanten Code.
  • Deshalb solltest du schauen, ob es Sinn macht – verschiedene Objekte bzw. Klassen in einer Vererbungslinie zu vereinen.
  • Dabei ist die Sinnhaftigkeit der Vererbung von Programm zu Programm vollkommen unterschiedlich.
  • Und deshalb solltest du immer dein Klassen Vererbungskonzept nach dem „IST-ES-EIN-Prinzip“ prüfen.

Ähnliche Beiträge

Du musst in Java nicht jede Exception fangen

Java Exception fangen

Kennst du die Metapher mit dem Jongleur und den Bällen? Ein Jongleur hält drei Bälle in der Luft, dann vier und irgendwann fünf. Aber irgendwann ist es genau ein Ball zu viel. Und Alles bricht zusammen. Ja ein Ball zu viel, kann alles versauen. 🙂 Und so ist es doch immer im Leben. Du kannst […]

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

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.

Über das kurze Leben einer lokalen Variablen

Java Variable lokal

Lass uns über die Lebensdauer einer lokalen Variablen sprechen. Warum ausgerechnet die Lebensdauer? Alle Java Variablen, unterscheiden sich in folgenden Punkten: wo diese deklariert werden können, wie du diese aufrufen kannst, welchen Bereich diese abdecken, und Ihre Lebensdauer Und eine lokale Java Variable hat eine relativ kurze Lebensdauer. Schauen wir uns zuerst Klassen- und Instanzvariablen […]

Java Methoden mit variabler Argumentenanzahl – VarArgs

Java Methoden mit variabler Argumentenanzahl VarArgs

Du kennst das noch. Kopfrechnen und zwar auf Zeit. So etwas ist das Standardprogramm in den Schulklassen 1 bis 5. Irgendwann, in Klasse 6 oder 7, kommt der Taschenrechner ins Spiel und Kopfrechnen ist aus dem Schulalltag gestrichen. Schade eigentlich. Dabei kann man diese Disziplin auch wunderbar in kleinen Spielen unterbringen. Ich erinnere mich noch: […]

So kannst du in drei einfachen Schritten Java Arrays dynamisch vergrößern

Java Arrays vergrößern

Es ist der 31.März 1727. Es ist ein Montag. Die Welt nimmt Abschied von einem sehr bedeutenden Weltveränderer. Seine Sichtweisen beeinflussen, heute noch, die Forschung und Entwicklung im Bereichen der Physik und Chemie. Ja selbst unser aller Leben – unsere Sicht auf die alltäglichen Dinge – wurden durch seine Denkstöße revolutioniert. Dieser große Vorreiter starb […]

Java Übung 27 – Auf zur Mathe-Olympiade

Java Übung Mathe Olympiade

In dieser Java Übung möchte ich mit dir ein Programm erstellen, welches ein Mathematik-Test oder eine Mathe-Olympiade simuliert. Du kennst das vielleicht noch aus der Schule. Matheolympiade- Da wurden aus allen vier Grundrechenarten, Aufgaben formuliert. Die Schüler mussten diese Aufgaben lösen. Die Lehrer kontrollierten die Lösungen. Und der Schüler, welcher die wenigsten Fehler hatte – […]

Java Objekte leben auf dem Heap

Java-Objekte-Heap

Java hat eine interne Speicherverwaltung. Eigentlich ist es nicht nur eine. Es sind mehrere.   Uns interessieren nur zwei. Methoden und lokale Variablen werden auf dem Stack verwaltet. Und die Speicherverwaltung für Java Objekte und den Instanzvariablen findet auf dem Heap statt.   Ja wieso braucht Java eigentlich zwei Speichersysteme?   Es ist ganz einfach. […]