Lernpfad:Objektorientierte Programmierung mit Java/Vererbung: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
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 implmentieren ==
== 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.}}

Navigationsmenü