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.


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

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.

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.


Und dann packen wir die fliegen()-Methode, eine Instanzvariable „flugGeschwindigkeit“ und andere coole Sachen rein.

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?


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.


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.


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.

  • 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.

Über den Autor

wissen
Folge Sciodoo und bleibe stets auf dem Laufenden. Schließ dich uns an und abonniere unseren Instagram-Kanal ein. Wir stellen täglich neue Artikel für dich rein.
Weiter zum Kanal>>>
     

Ähnliche Beiträge