i

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 (Diagramm ist nicht in UML sondern Java-spezifisch):

Klassendiagramm zur Vererbung

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- und World-Klassen in Greenfoot nicht direkt anschauen.

Suche

v
7.1.2.2.2
inf-schule.de/oop/java/implementierung/siw/konzept_vererbung
inf-schule.de/7.1.2.2.2
inf-schule.de/@/page/MfSilGxis2VeZ5ZH

Rückmeldung geben