8.582
Bearbeitungen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 19: | Zeile 19: | ||
Das neue Implementierungsdiagramm sieht so aus: | Das neue Implementierungsdiagramm sieht so aus: | ||
[[Datei:UML Vererbung 2.jpg|center]] | [[Datei:UML Vererbung 2.jpg|center]] | ||
Folgender Algorithmus ist mit Vererbung korrekt, obwohl der Quelltext der Klasse <code>Quadrat</code> die Methode <code>public void versetzen()</code> nirgendwo explizit enthält. | |||
<syntaxhighlight lang="java" line=1> | |||
Quadrat q = new Quadrat(10); | |||
q.versetzen(3, 5); | |||
</syntaxhighlight> | |||
{{Aufgabe:Start}} | {{Aufgabe:Start}} | ||
| Zeile 24: | Zeile 30: | ||
# 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 | == Vererbung implementieren == | ||
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. | 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> | <syntaxhighlight lang="java" line=1> | ||
| Zeile 169: | Zeile 175: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Typen von Unterklassen == | |||
Vererbung wirkt sich auch auf den Typ von Objekten einer Unterklasse aus. Eine Unterklasse <code>Quadrat</code> aus dem Beispiel ganz oben hat nicht mehr nur den Datentyp <code>Quadrat</code>, sondern auch den Typ aller ihrer Oberklassen. Ein Quadrat kann somit auch als Rechteck deklariert werden. | |||
<syntaxhighlight lang="java" line=1> | |||
// Bekannte Deklaration vom Typ Quadrat | |||
Quadrat q = new Quadrat(10); | |||
// Deklaration als Rechteck | |||
Rechteck q = new Quadrat(10); | |||
// Deklaration als Form | |||
Form q = new Quadrat(10); | |||
</syntaxhighlight> | |||
Speichert man ein <code>Quadrat</code> aber als <code>Form</code> ab, dann verliert es alle Methoden, die vom <code>Rechteck</code> und <code>Quadrat</code> implementiert wurden. Es sind nur noch die Methoden der <code>Form</code> aufrufbar. | |||
{{Kasten|Allgemeiner: Eine Objektreferenz hat nur diejenigen Methoden verfügbar, die von ihrem deklarierten Typ oder dessen Oberklassen implementiert werden.}} | |||