Kapitel 11: Überschreiben von Methoden

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:

  • private: Nur innerhalb der Klasse sichtbar
  • protected: Innerhalb der Klasse und in allen von ihr abgeleiteten Klassen sichtbar
  • public: Überall (auch von 'außen') sichtbar

Wir müssen also Folgendes ändern:

public class BewegteFigur {
 
    protected Sprite sprite;
 
    protected double vx, vy, ay;
 
...
}