Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

schule:klassen:2017:10b:kap11 [2018/06/13 11:16] – angelegt martinschule:klassen:2017:10b:kap11 [2021/12/29 11:40] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== 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:
 +<code java>
 +    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!
 +        }
 +    }
 +</code>
 +Wir erreichen das durch ''Überschreiben'' der Methode ''zeitschritt'' in der Klasse ''SternNeu'':
 +<code>
 +    public void zeitschritt() {
 +
 +        if (sprite != null) {
 +            sprite.drehen(vx * 2);
 +        }
 +
 +        super.zeitschritt();
 +
 +    }
 +</code>
 +
 +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.
 +<WRAP center round info 60%>
 +**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
 +</WRAP>
 +Wir müssen also Folgendes ändern:
 +<code java>
 +public class BewegteFigur {
 +
 +    protected Sprite sprite;
 +
 +    protected double vx, vy, ay;
 +
 +...
 +}
 +</code>
 +
  
Drucken/exportieren
QR-Code
QR-Code schule:klassen:2017:10b:kap11 (erstellt für aktuelle Seite)