Fachkonzept - Vererbung
Erweiterung von Klassen
Vererbung beschreibt die Vorgehensweise, eine neue Klasse als Erweiterung einer bereits bestehenden Klasse zu entwickeln. Die neue Klasse wird auch Unterklasse genannt. Die bestehende Klasse wird Oberklasse genannt.
Das folgende (gekürzte) Klassendiagramm zeigt eine Vererbungssituation, bei der die Unterklasse Schwein
eine Erweiterung der Oberklasse Actor
darstellt.
Alles was man tun muss, um eine Ober- Unterklassenbeziehung zu implementieren ist es in der Unterklasse anzugeben, dass diese eine Erweiterung der Oberklasse ist. In der Oberklasse ist nichts anzugeben.
class Schwein extends Actor
{
...
}
Übernehmen, ergänzen und überschreiben
Beim Vererben übernimmt die Unterklasse die Attribute und Methoden der Oberklasse.
Eine geerbte Methode kann dabei überschrieben (d. h. neu definiert) werden.
Das ist im Beispiel für die act-Methode der Fall.
Diese ist zwar in Actor
implementiert,
bewirkt aber nichts, so dass diese oft in Unterklassen überschrieben wird.
Die Unterklasse kann dann noch zusätzliche Attribute und Methoden ergänzen.
Zugriff auf Attribute und Methoden
Auch wenn die Attribute und Methoden vererbt werden,
bedeutet dies nicht, dass man in der Unterklasse
auch direkt darauf zugreifen kann.
Attribute werden üblicherweise als privat definiert,
um unsachgemäße Zugriffe darauf zu verhindern.
Das ist auch gut so, da man sonst leicht Fehler verursachen könnte.
In unserem Beispiel könnten wir versucht sein, Bewegungen über
die Änderung der x- und y-Koordinaten zu erzeugen.
Die Attribute sind aber durch private
geschützt,
da Greenfoot bei einer Änderung z.B. auch dafür sorgen muss,
dass das Fenster neu gezeichnet wird.
Deshalb kann man in Unterklassen nicht auf die privaten
Teile der Oberklasse zugreifen.
Glücklicherweise brauchen wir uns darüber aber keine großen Gedanken machen, da wir die nicht öffentlichen Teile einer Oberklasse üblicherweise gar nicht zu sehen bekommen. Eine Ausnahme stellt hier der Objektinspektor in BlueJ und Greenfoot dar. Dieser zeigt alle Attribute eines Objektes an, egal ob sie in der Ober- oder Unterklasse definiert wurden.
Einen Spezialfall stellt der Zugriffsmodifikator protected
dar.
Dieser wird gelegentlich bei Methoden benutzt, auf die man zwar in Unterklassen
zugreifen können soll, aber nicht außerhalb der Vererbungshierarchie.
Wir werden auf diesen Fall normalerweise nicht eingehen.
Geerbte Methoden herausfinden
Um in Greenfoot herauszufinden, welche Methoden man
von der Actor
- oder World
-Klasse
benutzen kann, gibt es mindestens drei Wege:
- Man erzeugt ein Objekt einer Unterklasse und probiert durch Rechtsklick auf das Objekt die Methoden aus. Das ist zwar keine besonders systematische Art und Weise, aber in einigen Fällen ausreichend.
- Man schaut sich die Dokumentation der Klasse an. Hier kann man detailliert Information zu den Methoden und deren genauen Verwendung finden. Wie man dabei vorgeht wirst Du im nächsten Projekt lernen.
- Man schaut sich den Quelltext der Klasse an.
Da man den Quelltext aber eigentlich nicht zu
verstehen braucht und das meist auch gar nicht möchte,
kann man sich den Quelltext der
Actor
- undWorld
-Klassen in Greenfoot nicht direkt anschauen.