Lernpfad:Hehomon/6: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 8: | Zeile 8: | ||
Zur Lösung dieser Probleme könnten wir einfach die Klasse <code>Hehomon</code> für jede Kreatur kopieren und die Angriffe und Verteidigungen entsprechend implementieren. Das hat aber das Problem, dass wir Änderungen (zum Beispiel eine neue Eigenschaft) in allen Kreatur-Klassen vornehmen müssen. Dabei passieren schnell Fehler (und es ist nervig). | Zur Lösung dieser Probleme könnten wir einfach die Klasse <code>Hehomon</code> für jede Kreatur kopieren und die Angriffe und Verteidigungen entsprechend implementieren. Das hat aber das Problem, dass wir Änderungen (zum Beispiel eine neue Eigenschaft) in allen Kreatur-Klassen vornehmen müssen. Dabei passieren schnell Fehler (und es ist nervig). | ||
Daher nutzen wir das Konzept der [[Vererbung]]. ''Vererbung'' ist eines der wichtigsten Konzepte der Objektorientierten Programmierung. Es erlaubt nämlich, eine (Ober-)Klasse als Grundlage für neue (Unter-)Klassen zu verwenden. Die Unterklassen haben dann alle Eigenschaften und Fähigkeiten der Oberklasse, können aber auch eigene hinzufügen. | Daher nutzen wir das Konzept der [[Lernpfad:Objektorientierte Programmierung mit Java/Vererbung|Vererbung]]. ''Vererbung'' ist eines der wichtigsten Konzepte der Objektorientierten Programmierung. Es erlaubt nämlich, eine (Ober-)Klasse als Grundlage für neue (Unter-)Klassen zu verwenden. Die Unterklassen haben dann alle Eigenschaften und Fähigkeiten der Oberklasse, können aber auch eigene hinzufügen. | ||
== Ich wähle dich, Alligung! == | == Ich wähle dich, Alligung! == | ||
Zeile 14: | Zeile 14: | ||
[[Bild:Alligung.png|center|frame|„Alligung“ - Ein Drachen-Hehomon]] | [[Bild:Alligung.png|center|frame|„Alligung“ - Ein Drachen-Hehomon]] | ||
Wir implementieren nun unser erstes ''Hehomon'': Den schrecklichen '''Alligung''' | Wir implementieren nun unser erstes ''Hehomon'': Den schrecklichen '''Alligung'''. | ||
<code>Alligung</code> ''erbt'' von der Klasse <code>Hehomon</code>. Dazu schreibt ihr hinter den Klassennamen <code>extends Hehomon</code>. Das war's schon. | |||
[[Quelltext:Hehomon.java]] | {{Aufgabe:Start|Icon=BlueJ Logo.png}} | ||
Erstellt eine neue Klasse <code>Alligung</code> im Projekt, die von <code>Hehomon</code> erbt. | |||
'''Hinweis:''' Alternativ könnt ihr statt ''Alligung'' auch schon eines eurer eigenen ''Hehomons'' umsetzen. Falls ihr im letzten Schritt Schwierigkeiten mit der Klasse <code>Hehomon</code> hattet, könnt ihr euch Hilfe in der [[Quelltext:Hehomon.java|Musterlösung]] suchen. | |||
{{Aufgabe:End}} | |||
Naja, das war's noch nicht ganz. Die Klasse <code>Hehomon</code> erfordert im Konstruktor eine ganze Menge von Parametern (<code>pName</code>, <code>pTyp</code>, <code>pLp</code>, ...), die beim Erstellen eines neuen Objekts angegeben werden müssen. | |||
{{Info:Start}} | |||
'''Zur Erinnerung:''' Der ''Konstruktor'' ist eine spezielle Methode, die beim Erstellen einer neuen Objektinstanz der Klasse ''als erstes'' aufgerufen wird. | |||
{{Info:End}} | |||
Wir müssen also im Konstruktor von <code>Alligung</code> dem Konstruktor der ''Oberklasse'' (oder auch ''Superklasse'') die Werte für die Parameter übergeben. Das machen wir mit der speziellen Methode <code>super</code>, die immer als erstes im Konstruktor einer Unterklasse aufgerufen werden muss. | |||
Für <code>Alligung</code> sieht das so aus: | |||
<syntaxhighlight lang="Java"> | |||
public Alligung() { | |||
super("Alligung", "drache", 100, 8, 6, "Alli-BÄMM", "Klauen-Kratzer", "Allez Hopp", "Gator-Aid"); | |||
} | |||
</syntaxhighlight> | |||
{{Aufgabe:Start|Icon=BlueJ Logo.png}} | |||
Ergänzt den Aufruf des Konstruktors der Oberklasse in <code>Alligung</code>. | |||
{{Aufgabe:End}} | |||
Die Klasse <code>Alligung</code> sollte nun so aussehen: | |||
<syntaxhighlight lang="Java"> | |||
public class Alligung extends Hehomon { | |||
public Alligung() { | |||
super("Alligung", "drache", 100, 8, 6, "Alli-BÄMM", "Klauen-Kratzer", "Allez Hopp", "Gator-Aid"); | |||
} | |||
} | |||
</syntaxhighlight> | |||
Im {{Pfad|7|nächsten Schritt}} bringe wir ''Alligung'' seine Fähigkeiten bei. |
Aktuelle Version vom 3. März 2020, 13:29 Uhr
In unserem Spiel existieren nun Hehomons. Um zwei gegeneinander antreten zu lassen können wir nun zwei Objekte der Klasse mit verschiedenen Parametern erstellen. Aber das wäre aus zwei Gründen wenig spannend:
- Die Methoden für Angriffe und Verteidigungen sind bisher leer.
- Die Hehomons sollen unterschiedliche Fähigkeiten besitzen, und nicht genau gleich Angreifen.
Zur Lösung dieser Probleme könnten wir einfach die Klasse Hehomon
für jede Kreatur kopieren und die Angriffe und Verteidigungen entsprechend implementieren. Das hat aber das Problem, dass wir Änderungen (zum Beispiel eine neue Eigenschaft) in allen Kreatur-Klassen vornehmen müssen. Dabei passieren schnell Fehler (und es ist nervig).
Daher nutzen wir das Konzept der Vererbung. Vererbung ist eines der wichtigsten Konzepte der Objektorientierten Programmierung. Es erlaubt nämlich, eine (Ober-)Klasse als Grundlage für neue (Unter-)Klassen zu verwenden. Die Unterklassen haben dann alle Eigenschaften und Fähigkeiten der Oberklasse, können aber auch eigene hinzufügen.
Ich wähle dich, Alligung!
Wir implementieren nun unser erstes Hehomon: Den schrecklichen Alligung.
Alligung
erbt von der Klasse Hehomon
. Dazu schreibt ihr hinter den Klassennamen extends Hehomon
. Das war's schon.
Erstellt eine neue Klasse Alligung
im Projekt, die von Hehomon
erbt.
Hinweis: Alternativ könnt ihr statt Alligung auch schon eines eurer eigenen Hehomons umsetzen. Falls ihr im letzten Schritt Schwierigkeiten mit der Klasse Hehomon
hattet, könnt ihr euch Hilfe in der Musterlösung suchen.
Naja, das war's noch nicht ganz. Die Klasse Hehomon
erfordert im Konstruktor eine ganze Menge von Parametern (pName
, pTyp
, pLp
, ...), die beim Erstellen eines neuen Objekts angegeben werden müssen.
Zur Erinnerung: Der Konstruktor ist eine spezielle Methode, die beim Erstellen einer neuen Objektinstanz der Klasse als erstes aufgerufen wird.
Wir müssen also im Konstruktor von Alligung
dem Konstruktor der Oberklasse (oder auch Superklasse) die Werte für die Parameter übergeben. Das machen wir mit der speziellen Methode super
, die immer als erstes im Konstruktor einer Unterklasse aufgerufen werden muss.
Für Alligung
sieht das so aus:
public Alligung() {
super("Alligung", "drache", 100, 8, 6, "Alli-BÄMM", "Klauen-Kratzer", "Allez Hopp", "Gator-Aid");
}
Die Klasse Alligung
sollte nun so aussehen:
public class Alligung extends Hehomon {
public Alligung() {
super("Alligung", "drache", 100, 8, 6, "Alli-BÄMM", "Klauen-Kratzer", "Allez Hopp", "Gator-Aid");
}
}
Im nächsten Schritt bringe wir Alligung seine Fähigkeiten bei.