8.582
Bearbeitungen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 25: | Zeile 25: | ||
# Implementiere die Klassen. Nutz dazu das Vererbungskonzept so weit es geht aus. | # Implementiere die Klassen. Nutz dazu das Vererbungskonzept so weit es geht aus. | ||
{{Aufgabe:End}} | {{Aufgabe:End}} | ||
== Vererbung implmentieren == | |||
Für die Implementierung von Vererbung gibt es in Java das Schlüsselwort <code>extends</code>. Man ergänzt es bei der Unterklasse direkt hinter dem Klassennamen mit dem Namen der Oberklasse. | |||
<syntaxhighlight lang="java" line=1> | |||
public class Form { | |||
// ... | |||
} | |||
public class Rechteck extends Form { | |||
// ... | |||
} | |||
public class Quadrat extends Rechteck { | |||
// ... | |||
} | |||
</syntaxhighlight> | |||
== Methoden überschreiben == | == Methoden überschreiben == | ||
Beim Überschreiben bekommen abgeleitete Klassen eine eigene Version mindestens einer Methode der Basisklasse. | Beim Überschreiben bekommen abgeleitete Klassen eine eigene Version mindestens einer Methode der Basisklasse. | ||
| Zeile 31: | Zeile 45: | ||
[[Datei:UML Vererbung 3.jpg|center]] | [[Datei:UML Vererbung 3.jpg|center]] | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java" line="1"> | ||
class Tier { | class Tier { | ||
public void sagWas() { | public void sagWas() { | ||
| Zeile 86: | Zeile 100: | ||
== <code>super</code> und <code>this</code> == | == <code>super</code> und <code>this</code> == | ||
Wird eine Methode von einer Unterklasse überschrieben möchte man dennoch manchmal explizit die überschriebene Methode der Oberklasse aufrufen. Für diese Fälle gibt es das bekannte Schlüsselwort <code>super</code>. Es bezieht sich immer auf die Oberklasse der aktuellen Klasse. Um explizit die aktuelle Klasse zu referenzieren, kann das Schlüsselwort <code>this</code> benutzt werden. | Wird eine Methode von einer Unterklasse überschrieben möchte man dennoch manchmal explizit die überschriebene Methode der Oberklasse aufrufen. Für diese Fälle gibt es das bekannte Schlüsselwort <code>super</code>. Es bezieht sich immer auf ''die Oberklasse der aktuellen Klasse''. Um ''explizit die aktuelle Klasse'' zu referenzieren, kann das Schlüsselwort <code>this</code> benutzt werden. | ||
Im folgenden Beispiel überschriebt die Klasse <code>Hund</code> die Methode <code>public void ausgabe()</code> er Oberklasse <code>Tier</code>, um auch die Rasse auszugeben. Die Ausgabe der Oberklasse soll dennoch gemacht werden, daher wird die Methode der Oberklasse explizit mit <code>super.ausgabe()</code> aufgerufen. | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java" line="1"> | ||
class Tier { | class Tier { | ||
// Das Attribut ist private und von der Unterklasse nicht nutzbar. | // Das Attribut ist private und von der Unterklasse nicht nutzbar. | ||
| Zeile 118: | Zeile 134: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Aufgabe:Start}} | |||
# Ergänzen sie eine Klasse <code>HundMitBesitzer</code>, die ein Attribut <code>String besitzer</code> hat, das den Namen des Hundebesitzers speichert. Bei Aufruf der Methode <code>public void ausgabe()</code> soll zunächst die Ausgabe von <code>Hund</code> ausgegeben werden, dann der Name des Besitzers. | |||
{{Aufgabe:End}} | |||
== Das Schlüsselwort <code>final</code> == | == Das Schlüsselwort <code>final</code> == | ||
Möchte man verhindern, dass eine Unterklasse eine Methode überschreibt, dann kann man sie als <code>final</code> deklarieren. | Möchte man verhindern, dass eine Unterklasse eine Methode ''überschreibt'', dann kann man sie als <code>final</code> deklarieren. Versucht eine Unterklasse es dennoch, dann kann das Programm nicht mehr [[wikipedia:Compiler|übersetzt]] werden. | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java" line="1"> | ||
class Tier { | class Tier { | ||
// Das Attribut ist private und von der Unterklasse nicht nutzbar. | // Das Attribut ist private und von der Unterklasse nicht nutzbar. | ||