Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

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.

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:

X

Fehler melden

X

Suche