Skip to main content

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

Hier sind ein paar richtig nette Features, die dich beim Java lernen unterstützen

Java lernen Eclipse

Was ist das Wichtigste beim Einstieg in ein neues Wissensgebiet? Nein, kein gutes Sachbuch oder ein besonders guter Lehrer. Es ist Spaß. Beim Java Lernen brauchst du Spaß. Es gibt Lehrer, welche ihren Stoff so vermitteln, dass Lernen Spaß bereitet. Aber die Grundvoraussetzung ist und bleibt der Spaß. Und nichts ist so spaßhemmend wie Langeweile […]

Java lernen von Kopf bis Fuß

Wenn du Java lernen möchtest, kannst du an meinem kostenlosen Java Kurs teilnehmen. Aber manch Einer hätte gern eine zweite Meinung. Und da bieten sich natürlich Java Bücher an. Eines dieser Java Bücher möchte ich dir jetzt vorstellen. Dieses Buch nennt sich „Java von Kopf bis Fuß“. Was kannst du von diesem Buch erwarten? Also […]

Java Konsolenausgaben mit formatierten Zahlen

Java Konsolenausgaben 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 den Tausenderpunkt. Vielleicht möchtest du […]

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

Der Java Datentyp boolean im Interview

Java boolean

Nein, ich bin nicht verrückt. Aber… Neulich traf ich zufällig den Java Datentyp boolean. 🙂 Er erklärte sich bereit, mir ein Interview zu geben. In diesem Interview geht es um die Werte, welcher dieser Wertetyp annehmen kann. Und in diesem Zusammenhang geht es auch um Logik. Also lassen wir uns doch die Logik vom direkten […]

Ende vom Java Blog?

Falls du hier schon länger dabei bist, wird dir aufgefallen sein – dass kaum noch Beiträge veröffentlicht werden. Das tut mir wirklich leid und dafür möchte ich mich auch entschuldigen. Ich weiß, dass Einige unter Euch den Java-Blog wirklich lieben. Aber es ist verdammt schwierig so ein aufwendiges Thema – stilvoll, unterhaltend und methodisch umzusetzen. […]

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

Die drei Bestandteile aller Java Klassen

Java Klassen Bestandteile

Java ist eine objektorientierte Programmiersprache. Was heißt das? Ja… Anscheinend hat es etwas mit Objekten zu tun. Also was ist ein Objekt? Ein Objekt ist ein bestimmtes Konstrukt im Programm. Bauen wir ein Spiel. Ein Grafik-Adventure. Du kennst das. Ein Held wird in eine bestimmte Spielwelt hinein gesteckt. Der Held muss mit bestimmten Personen sprechen. […]