5.3 Vererbung
Im Folgenden werden wir an einer Erweiterung des Programms Bälle fangen arbeiten.
Zusätzlich zu den beiden Klassen Anwendung
und Ball
wird noch eine Klasse SpeedBall
hinzugefügt. Nachfolgend ist der komplette Quelltext der Klasse SpeedBall
dargestellt.
import SGE.*;
public class SpeedBall extends Ball
{
public SpeedBall(SGLeinwand pLeinwand)
{
super(pLeinwand);
}
@Override
public void bewege()
{
vX = vX * 1.001;
vY = vY * 1.001;
super.bewege();
}
}

Aufgaben
Um zu verstehen, wie die Klasse SpeedBall
funktioniert, bearbeite die folgenden Aufgaben:
- Markiere alles, was für dich neu aussieht, und was dir unklar ist. Kennst du die Übersetzung der neuen englischen (Schlüssel-)wörter?
- Was fehlt alles, wenn du an die Programmierung der Klasse
Ball
denkst? - Versuche zu beschreiben, was in der Methode
bewege
der KlasseSpeedBall
Die Vererbungs-Beziehung zwischen den Klassen SpeedBall
und Ball
bedeutet:
Ein Objekt aus der Klasse SpeedBall
ist auch ein Objekt der Klasse Ball
. Es „erbt“ damit alle Attribute und Methoden aus der Klasse Ball
. Die Klasse Ball
heißt bei dieser Beziehung Oberklasse oder Superklasse und die Klasse SpeedBall
Unterklasse. Man sagt auch: Eine Unterklasse wird von der Oberklasse abgeleitet. In der Unterklasse können Methoden der Oberklasse überschrieben werden.
- Wende diese Information noch einmal auf Aufgabe 3 an.
Öffne den Prototypen zum Speedball-Projekt. Dort ist die Klasse Speedball wie oben implementiert. Beim Übersetzen wird aber ein Fehler angezeigt.
- Lies die folgenden Informationen zu den Sichtbarkeitsmodifikatoren.
Sichtbarkeitsmodifikatoren
Jedes Attribut und jede Methode hat automatisch einen Sichtbarkeitsmodifikator. Dadurch wird festgelegt, aus welchen Klassen auf das Attribut (die Methode) zugegriffen werden kann.
private (in UML: „-“ ): Nur die Klasse selber darf das Attribut (die Methode) verwenden
protected (in UML: „#“): Die Klasse und ihre Unterklassen dürfen das Attribut (die Methode) verwenden.
public (in UML: „+“): Alle Klassen dürfen das Attribut (die Methode) verwenden.
Prinzipiell gilt: In der Objektorientierten Programmierung (OOP) versucht man für jedes Attribut und jede Methode die Sichtbarkeit möglichst stark einzuschränken (Geheimnisprinzip). Sind z.B. alle Attribute einer Klasse auf private
gesetzt, dann kann niemand als das Objekt aus dieser Klasse selber auf seine Attribute zugreifen. Dadurch schützt sich das Objekt vor unbefugtem Ändern seiner Attribute.
Die Methoden, die eine Klasse als Dienste nach außen bereitstellt werden auf public
gesetzt. Nur sie sind für andere Objekte als Methoden der Klasse sichtbar.
Aufgaben
- Verändere die Sichtbarkeit der Attribute
vX
undvY
so, dass in der KlasseSpeedBall
darauf zugegriffen werden kann. - Lass die Anwendung laufen. Du wirst feststellen, dass keiner der Bälle beschleunigt. Im Konstruktor der
Anwendung
werden nur zwei Objekte der KlasseBall
erzeugt. Ändere dies so ab, dass der Ballb2
ein Objekt der KlasseSpeedBall
ist. Danach sollte eine der Kugeln beschleunigen. - Probiere aus: Es ist egal, ob man in der
Anwendung
das Attributb2
als Objekt vom DatentypBall
oderSpeedBall
deklariert. Versuche das zu erklären. - Umgekehrt: Deklariere
b2
als SpeedBall und erzeuge ein Objekt der KlasseBall
. Erkläre, warum dabei ein Fehler ausgegeben wird. - Kommentiere in der Methode
bewege
in der KlasseSpeedBall
die Zeile mit demsuper
-Aufruf aus und führe das Programm aus. Beschreibe, was passiert und erkläre dies.