Skip to main content

Das Java Vererbung Konzept erklärt, am Beispiel eines Rollenspiels


Das Java Vererbung Konzept in einem Rollenspiel

Java ist eine objektorientierte Programmiersprache.

Und das bedeutet nicht nur, dass du Objekte einer Java Klasse erzeugen kannst.
Es bedeutet auch, dass Java Klassen von anderen Klassen erben können.

Wieso das Ganze?
Stell dir einmal ein Rollenspiel vor.

Wie würdest du ein Rollenspiel entwerfen?

  • In einem Rollenspiel gibt es magische Gegenstände.
    Zauberringe, Zauberstäbe, welche bei Benutzung irgendetwas Cooles machen.
  • Es gibt aber auch Gegenstände, wie Schwerter, Äxte und Hämmer.
    Mit denen kannst du gewöhnlich nur zuschlagen.
  • Und natürlich gibt es Helden in so einem Rollenspiel.
    Es gibt die gewöhnlichen Helden, welche kämpfen, herumlaufen und springen können.
  • Und dann gibt es vielleicht noch Superhelden, welche neben dem normalen Zeugs, noch teleportieren, fliegen oder sich verwandeln können.
  • Und na klar brauchst du noch Feinde, Schurken und Gesindel.
    Dies können Menschen, Tiere oder Monster sein.

Ja so ein Rollenspiel ist ziemlich extravagant.
Wenn du jetzt so ein Rollenspiel gedanklich entwerfen müsstest, wie würdest du vorgehen?

Bevor du Objekte machen kannst, brauchst du Java Klassen.

Denn Java Klassen stellen die Gebrauchsanweisung für die Objekte dar.

Du musst also Klassen für alle möglichen Objekte schreiben.
Und in diese Klassen kommen dann Variablen für Stärke, Größe, Level usw.
Außerdem beinhalten diese Klassen auch Methoden.
Und in diesen Methoden vereinbarst du all dies, was die Objekte so können.

Zum Beispiel:

  • Helden können sich bewegen, zuschlagen oder springen.
  • Superhelden können außerdem fliegen.
  • Zauberringe können glänzen, am Finger getragen werden und bei richtiger Anwendung sogar heilen.

Es gibt somit eine Menge zu tun.

Also….
Beginnen wir bei den Helden.
Nehmen wir an, es gibt zehn Helden.
5 Superhelden mit Superkräften und 5 normale Helden ohne Superkräfte.

Wenn du jetzt die Klassen entwerfen würdest, würdest du zwei Klassen erstellen.

  • Die erste Klasse wären die „normalen Helden“.
  • Und die zweite Klasse die Superhelden.

Die Klassen würden Instanzvariablen enthalten.

  • Die Größe des Helden als Integer-Datentyp
  • Der Name des Helden als ein String.
  • Das aktuelle Level des Helden als Integer.
  • Und natürlich folgen Attribute, wie Schlagkraft, Ausdauer, Schnelligkeit und der ganze andere Kram.

Und so könntest du einen Helden erschaffen, welcher männlich ist und folgende Attribute hätte.

  • String geschlecht =“männlich“;
  • int groesse = 180;
  • String personName= „Jack“;
  • int aktLevel= 1;
  • int schlagKraft =22;
  • int ausdauer=15;
  • int schnelligkeit=10;
  • int ruestungLevel = 15;

Und in etwa so könnte der Held dann aussehen.

Java-Vererbung-Held-männlich

Und du würdest einen zweiten Helden erschaffen, mit anderen Attributen.
Diese könnte weiblich sein und Jaqueline heißen.
Java-Vererbung-weiblich-Held

Wichtig ist, dass du aus einer „Helden-Klasse“ so viele Helden produzieren könntest, wie du willst.
Du legst einfach die Instanzvariablen in deiner „Heldenklasse“ an.
Und alle Objekte, welche du aus dieser Klasse anlegst, können ihre persönlichen Eigenschaften erhalten.
Java-Vererbung-Objekte

Und wie sieht es mit Methoden aus?

Die Instanzmethoden, welche du in den Klassen anlegst, stehen ebenfalls allen Helden zur Verfügung.

Du könntest die Methoden herumlaufen() und zuschlagen() anbieten.

Die Methode zuschlagen, würde die Instanzvariable „schlagKraft“ erwarten.
Und in Abhängigkeit von der Schlagkraft, würde die Methode irgendetwas beim Gegner anrichten.
Und so würde die Methode zuschlagen bei Jack aussehen.

Java-Vererbung-Methode-zuschlagen

Und so bei Jaqueline.
Java-Vererbung-zuschlagen-Methode

Die Methode herumlaufen, würde die Instanzvariablen „schnelligkeit“ und „ausdauer“ erwarten.
Und im Methodenrumpf würden diese verarbeitet werden.
Bei Jack so.
Java-Vererbung-herumlaufen

Bei Jaqueline so.
Java-Vererbung-Methode-herumlaufen

Die Instanzmethoden stehen somit auch jedem Objekt zur Verfügung, welches aus der Java Klasse für Helden erschaffen wurde.
Java-Vererbung-Methoden

Halten wir fesst:
Sobald du ein Objekt der Heldenklasse erstellst, bekommt dieses die ganzen Instanzmethoden dazu und kann diese nutzen.

So jetzt haben wir die Helden im Spiel.
Was ist mit den Superhelden?

Du erinnerst dich:
Wir wollten 5 Normalo-Helden erstellen.
Und 5 Superhelden mit Superkräften.

Diese Superhelden sollten genau das Gleiche können, wie die Normalos.
Aber sie sollten noch echt coole Superkräfte haben.

Na dann implementieren wir ein paar Superhelden dazu.

Lass uns die Superhelden erstellen.

Also wie machen wir das?
Lass uns mal zwei Alternativen durchdenken.

Alternative 1
Wir erstellen eine neue Klasse und nennen diese Superhelden.
Und in dieser Klasse kopieren wir den Code der „Normalo-Helden-Klasse“.
Kopieren ist dann Copy und Paste.
Und nachdem wir den ganzen Kram reinkopiert haben, bieten wir noch neue Methoden und Eigenschaften an.
Eben so was, wie das Fliegen, den Röntgenblick usw.

Oder Alternative 2.
Wir erstellen keine neue Klasse.
Stattdessen erweitern wir die Heldenklasse um zusätzliche Methoden und Instanzvariablen.
Und hoffen, dass die Normalos diese niemals nutzen.

Gehen wir doch gedanklich einmal beide Alternativen durch.

Alternative 1:
Wir erstellen eine neue Superhelden-Klasse und kopieren den Helden-Code da hinein.

Java-Vererbung-Kopieren

Und dann packen wir die fliegen()-Methode, eine Instanzvariable „flugGeschwindigkeit“ und andere coole Sachen rein.
Java-Vererbung-Methoden-hinzufügen

So und irgendwann ist das Spiel fertig.
Du hast die Heldenklasse, die Superheldenklasse und es kann losgehen.

Ein richtig geiles Game.
Bis zu dem Zeitpunkt, an dem du feststellst, dass andere Rollenspiele mehr können.
Da gibt es Methoden zum Waffen-Bauen, zum Heilen, zum Schläge-Ausweichen, zum Ducken usw.

Also was machst du dann?
Du musst diese Methoden implementieren.
Und zwar wieder in beide Klassen.

Also Heldenklasse auf:

  • Waffenbauen-Methode rein.
  • Und Ausweichen-Methode rein.

Dann die Superhelden-Klasse auf und ebenfalls die Waffenbauen-Methode und Ausweichen-Methode rein.

Bis jetzt ist das noch kein Problem.
Du hast nur zwei Klassen.
Aber stell dir doch einmal vor, du bietest verschiedene Heldentypen an.
Eben nicht nur Normalos und Superhelden, sondern Bogenschützen, Berserker, Zauberer, Piraten, Diebe usw.
Und für alle Type eine separate Klasse mit Copy-and-Paste-Code.
Sobald diese Heldentypen ein neues Feature erhalten sollen, musst du dies in allen Klassen umsetzen.

Die Alternative 1 ist somit nicht ganz optimal.

Also was ist mit Alternative 2?
Du bietest in der Heldenklasse alle Methoden (auch fliegen) und Variablen (auch röntgenblickLevel) an und hoffst darauf, dass nur die Superhelden diese nutzen.
Mal ganz ehrlich – Der Ansatz hört sich doch schon mies an, oder?

Aber was dann?
Alternative drei heißt Vererbung.

Kümmern wir uns jetzt um die Vererbung der Java Klassen.

Wie kannst du dir dieses ganze Java-Vererbungskonzept vorstellen?

Du erschaffst die Klasse Helden.
Und diese Klasse ist eine sogenannte Superklasse.

Und diese Superklasse hat diverse Unterklassen.
Dies sind dann die Klassen für Superhelden, für Bogenschützen, für Berserker usw.

Aber lass uns bei den Superhelden bleiben.
Was heißt das nun – für die Superhelden.

Die Klasse Superhelden erbt von der Klasse Helden.
Und somit stehen der Superhelden-Klasse alle Methoden und alle Instanzvariablen der Heldenklasse zur Verfügung.
Das ganze geschieht ohne Copy und Paste.
Stattdessen schreibst du in die Klassendefinition das Keyword extends und dann den Namen der Superklasse.

Also: public class SuperHelden extends Helden
Und das war es schon.
Somit besitzt die Unterklasse Superhelden alle Eigenschaften der Heldenklasse.
Cool, oder?

Java-Vererbung-SuperheldenKlasse

Doch es wird noch besser.
Sobald du die Heldenklasse erweiterst – erweitert sich ganz automatisch die Unterklasse auch.

Das bedeutet für dich.
Wenn du irgendwann feststellst:

  • Die Helden müssen auch ausweichen können.
  • Dann implementierst du eine ausweichen()-Methode in die Heldenklasse.
  • Und dann können alle Normalo-Helden diese Methode nutzen.
  • Aber auch allen Superhelden steht dann diese Funktion zur Verfügung.

Java-Vererbung-ausweichen

Und was ist mit fliegen(), Röntgenstrahl und den anderen coolen Kram?
Diese Methoden und Instanzvariablen implementierst du nur in der Superhelden-Klasse.

Das tolle ist, dass die Normalo-Helden davon nichts mitbekommen.
Denn Vererbung funktioniert nur in eine Richtung.
Die Heldenklasse ist die Vaterklasse.
Und die Superhelden-Klasse ist die Kindklasse.

Die Vater- oder Oberklasse kann nicht von der Kindklasse erben.
Somit schreibst du alle Methoden, welche Superhelden und Normalo-Helden betreffen in die Vaterklasse (Heldenklasse).

Die Kind- bzw. Unterklasse (Superhelden) erbt das alles.

Und in die Superhelden-Klasse schreibst du den ganzen Kram, welche nur Superhelden können dürfen.

Java-Vererbung-Rückwärts

Und der Spaß geht noch weiter.
Natürlich kann die Superhelden-Klasse ebenfalls Unterklassen besitzen.
So können manche Superhelden Wände hochklettern.
Wiederum Andere können sich verwandeln.
Java-Vererbung-Unterklassen

  • Du siehst in der Oberklasse bietest du allgemeine Methoden und Instanzvariablen an.
    All den Kram den alle Helden können.
    Zum Beispiel. herumlaufen()
  • Dann kommt die erste Superheldenklasse.
    Diese erweitert die Heldenklasse um die Methode fliegen().
    Falls du dann ein Superhelden-Objekt erstellst, kann es fliegen.
    Somit können alle Superhelden herumlaufen und fliegen.
    Normalo-Helden, wie Jack und Jaqueline, können weiterhin nur herumlaufen.
  • Es folgen zwei weitere Klassen- Superheldenkletterer und Superheldenverwandler.
    Beide Klassen erweitern die Superhelden.
  • Die Klasse Superheldenkletterer erweitert die Superheldenklasse, um die Methode klettereWaendeHoch().
    Alle Objekte, welche du dann aus der SuperheldenKletterer-Klasse erstellst können dann „Wände hochklettern“, „fliegen“ und herumlaufen.
  • Die zweite Superheldenklasse kann keine Wände hochklettern.
    Dafür steht den Objekten die Methode verwandeln() zur Verfügung.

Wenn du jetzt ein Objekt der „SuperHeldenVerwandler-Klasse“ anlegst, kann dieser:

  • Sich bewegen und all das, was alle Helden aus der Heldenklasse können
  • Fliegen und all das, was alle Superhelden aus der Superhelden-Klasse können.
  • Und sich verwandeln, was speziell nur diese Klasse kann.

Cool, oder?

Zusammenfassung:

  • Um deinen Code flexibel zu halten, kannst du Java Klassen erweitern.
  • Diese Klassen-Erweiterung machst du mit dem Keyword extends.
  • Das Konzept dahinter nennt sich Vererbung.
  • Alle Superklassen vererben Methoden und Variablen an ihre Unterklassen.
    Somit brauchst du nur den Code in der Superklasse zu ändern und dadurch ändern sich alle Eigenschaften der Unterklassen ebenfalls.
  • Die Unterklassen kannst du dann um spezifische Methoden ergänzen.
  • Die ganze Java Vererbung funktioniert nur in eine Richtung.
    Somit bleiben die Methoden schön in den Unterklassen und stehen den Superklassen nicht zur Verfügung.

Ähnliche Beiträge

Die 5 verschiedenen Zahlensysteme in der Java Programmierung

java programmierung zahlensysteme

Java Zahlensysteme – Was soll das? In sämtlichen Programmiersprachen werden Zahlen in Variablen abgespeichert. Wenn du dir die einzelnen primitiven Datentypen in Java einmal anschaust – wirst du feststellen – dass die Masse der Datentypen Zahlen annehmen und speichern können. Zahlen und die Mathematik dahinter spielen in der Programmierung eine […]

Syntax, Semantik und Lexikalik in der Java Programmierung

java programmierung lexikalik syntax semantik

Java ist eine Programmiersprache. Und wie jede andere Programmiersprache ist auch Java, lediglich eine künstliche Sprache.   Normalerweise bieten künstliche Projekte immer jede Menge Spielraum für Eigenkreationen. Bei der Programmierung ist dies nicht ganz so. Denn Programmiersprachen sind auch immer sehr exakt.   Jede Programmiersprache und auch jede gesprochene Sprache […]

Zwei smarte Möglichkeiten eine Java Zufallszahl zu erzeugen

java zufallszahl anlegen erzeugen

Java Zufallszahl – Wieso? In der Java Programmierung benötigst du immer wieder einmal Zufallszahlen. Du möchtest deine Software mit Daten testen und dir keine Zahlen ausdenken. Du benötigst Stichproben, welche ein reales Verhalten simulieren. Du hast ein Spiel entworfen und die Akteure sollen mit zufälligen aber unterschiedlichen Größen, Rüstungsleveln usw. […]

Lokale Variablen im Java Programm: Lebensdauer und Nutzung

lokale variablen im java programm

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

So funktioniert der Java Programmstart mit Argumenten-Übergabe

java programmierung programmstart argumente

Um ein Java Programm starten zu können, benötigst du immer die main-Methode. Das Programm startet immer genau an dieser Stelle. Alle lokalen Variablen, welche du in der Main Methode anlegst, kannst du dann im Programm nutzen. Auch alle Methoden, welche du innerhalb des Methodenrumpfes der main-Methode aufrust, werden ausgeführt. Was […]

So funktioniert die Java Konsoleneingabe über den Scanner

java programmierung konsoleneingabe scanner

Es wird Zeit für die erste Java Konsoleneingabe. Und diese Eingaben machst du über den Java Scanner. Was ist das? Der Scanner ist eine vorgefertigte Java Klasse, welche Java mit seiner API anbietet. Das heißt du musst nichts selbst erschaffen. Du musst nur wissen, wie du darauf zugreifst. Erst einmal […]

Java Anfänger Übung: 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“ […]

So kannst du spielend Java Programmierung lernen

java programmierung lernen

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

So solltest du Kommentare im Java Programm einsetzen

java programmierung kommentare

Bei der Java Programmierung sind Kommentare mitunter genauso wichtig wie der eigentliche Code. Denn ein guter Kommentar zeigt dir sofort, was mit dem Code gemeint ist, was dieser bewirkt und was sich der Entwickler dabei dachte. Wie werden Kommentare in Java gesetzt? Die Kommentare werden in Eclipse immer grün dargestellt. […]

So sorgt Java Polymorphie für besseren Code und mehr Möglichkeiten

java programmierung polymorphie code möglichkeiten

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

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 in Java eine Binärzahl in eine Dezimalzahl umwandeln

java programmierung binärzahl in dezimalzahl umwandeln

Erinnerst du dich? In einer der letzten Beiträge haben wir uns die Zusammenhänge zwischen dem dualen und dem dezimalen Zahlensystem angeschaut. Aber wir haben noch keine Java Binärzahl in eine Dezimalzahl verwandelt. Zumindestens nicht praktisch…. Stattdessen…. Haben wir festgestellt, dass beide Zahlensysteme im Grunde genommen sehr ähnlich sind. Beim Dezimalsystem […]

So unterstützen dich Java Vererbungstabellen beim Klassen-Entwurf

java programmierung vererbungstabellen klassenentwurf

Bei der Java Vererbung gibt es zwei Klassenarten bzw. -stufen. Die Superklassen, welche einen allgemeinen Typen darstellen Und die spezielleren Unterklassen, welche die Superklasse um bestimmte Funktionen erweitern. Jetzt ist dieses ganze „Der-erbt-von-dem-Konzept“ mitunter sehr schwierig darzustellen. Zum Beispiel in einem Werkzeugkoffer. In einem Werkzeugkoffer befinden sich sämtliche Werkzeuge, von […]

Java Konsolenausgaben mit formatierten Zahlen

java programmierung konsolenausgabe mit formatierten zahlen

Java Konsolenausgaben erzeugst du mit der System.out.println()-Anweisung. Dies ist relativ einfach. Aber es ist mitunter nicht ganz praktisch. Und zwar immer dann, wenn Zahlen im Spiel sind. Die Zahlen welche dann auf deiner Java Konsole erscheinen, sind unformatiert. Sie haben zu viele Kommastellen. Oder für eine bessere Darstellung benötigst du […]

So kannst du Java Superklassen mit dem Vererbungsbaum entwerfen

java programmierung superklassen vererbungsbaum

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

So kannst du Konstanten in Java Programmen anlegen und nutzen

java programmierung konstanten anlegen und nutzen

Java Konstanten – was kann man sich darunter vorstellen? Du kennst Konstanten in der Mathematik. Die Kreiszahl Pi ist so eine konstante Zahl. Diese Zahl ändert sich niemals. Sie beträgt immer rund 3,141592. In der Physik gelten die Lichtgeschwindigkeit, der Erdradius oder der absolute Nullpunkt als konstant. Selbst die Geschwindigkeit […]

Namenskonventionen bei der Java Programmierung

java-programmierung-namenskonvention-lowercasecamelcase

Beiderjavaprogrammierungsolltestduaufdierichtigenamensvergabeachten. indennnamengebendeinenjavaprogrammeinegrundlegendestruktur. Was sagen dir die beiden oberen Sätze? Häh? Da steht: Bei der Java Programmierung solltest du auf die richtige Namensvergabe achten. Denn Namen geben deinem Java Programm eine grundlegende Struktur. Jede Sprache braucht Regeln. Diese Regeln, wie Grammatik oder Rechtschreibung geben der Sprache eine Struktur. Jeder Leser, welcher […]

Unterschied zwischen Klassenvariable und Instanzvariable im Java Programm

unterschied klassenvariable instanzvariable java programmierung

Bei der Java Programmierung unterscheidet man drei Arten von Variablen. Als erste Gruppe sind die lokalen Variablen zu nennen. Auf diese gehe ich in einem separaten Artikel ein. Mich interessieren die zwei anderen Variablentypen. Zum einen existieren Klassenvariablen. Und dann sind da noch die Instanzvariablen. Wo liegt der Unterschied zwischen […]