Oft unterscheiden sich die von einer Basisklasse abgeleiteten Klassen nicht nur dadurch, dass sie zusätzliche Attribute oder Methoden haben, sondern auch in der Implementierung gemeinsamer Methoden. Das Beispiel aus Kapitel 10 soll im folgenden so erweitert werden, dass sich die Sterne zusätzlich drehen, d.h. ihre zeitschritt
-Methode sieht so aus:
public void zeitschritt(){ vy += ay; if(sprite != null) { sprite.verschieben(vx, vy); sprite.drehen(vx*2); //Diese Anweisung gibt es nicht bei Motorrädern und Autos! } }
Wir erreichen das durch Überschreiben
der Methode zeitschritt
in der Klasse SternNeu
:
public void zeitschritt() { if (sprite != null) { sprite.drehen(vx * 2); } super.zeitschritt(); }
Zunächst erhalten wir einen Fehler beim Kompilieren, da die Attribute vx
und sprite
in der Basisklasse Bewegte Figur
mit der Sichtbarkeit private
deklariert wurden. Dieser Fehler lässt sich beheben, indem man die Sichtbarkeit zu protected
ändern.
Sichtbarkeit von Attributen und Methoden:
Wir müssen also Folgendes ändern:
public class BewegteFigur { protected Sprite sprite; protected double vx, vy, ay; ... }