Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte Überarbeitung Beide Seiten der Revision
schule:klassen:2017:10b:kap12 [2018/06/13 11:29]
martin angelegt
schule:klassen:2017:10b:kap12 [2018/06/13 14:16]
martin
Zeile 1: Zeile 1:
-====== ​Level Überschrift ​======+====== ​Abstrakte Basisklassen und abstrakte Methoden ====== 
 +Im vorangegangenen Kapitel wurde die Methode ''​zeitschritt()''​ von einer der von ''​BewegtesObjekt''​ abgeleiteten Klassen überschrieben (Klasse ''​SternNeu''​). Die Klassen ''​AutoNeu''​ und ''​MotorradNeu''​ überschreiben die Methode nicht, sie behalten also die Methode der Basisklasse bei. \\ 
 +Oft kommt es vor, dass alle abgeleiteten Klassen eine gemeinsame Methode haben (und sie deshalb in die Basisklasse geschrieben wird), die Implementierung der Methode sich aber für alle abgeleiteten Klassen unterscheidet,​ so dass es nicht sinnvoll ist, die Methode in der Basisklasse zu implementieren. In diesem Fall kennzeichnet man sowohl die Basisklasse als auch die Methode als ''​abstract''​. Dies hat zur Folge, dass man die Methode in der Basisklasse nur deklarieren,​ aber nicht implementieren muss. Die abgeleiteten Klassen haben dann aber die **Pflicht**,​ diese Methode zu überschreiben. \\ \\  
 +Wir denken uns eine Methode ''​kunststück()'',​ die die Klassen ''​Auto'',​ ''​Motorrad''​ und ''​Stern''​ jeweils unterschiedlich implementieren. 
 +===== Abstrakte Klasse BewegtesObjekt ===== 
 +<code java> 
 +public abstract class BewegtesObjekt { 
 + 
 +    // Beginn der Klasse wie im vorigen Kapitel gezeigt. 
 +    // Neu ist: 
 + 
 +    abstract public void kunststück();​ 
 + 
 + 
 +
 +</​code>​ 
 + 
 +===== Klasse SternNeu ===== 
 +<code java> 
 +public class SternNeu extends BewegtesObjekt1 { 
 + 
 +    public SternNeu(double x, double y){ 
 + 
 +        super(x, y, Math.random() * 6 - 3, Math.random() * (-15) - 5, 
 +                0.3, "/​vererbung/​star.png"​);​ 
 + 
 +    } 
 + 
 +    public void zeitschritt(){ 
 + 
 +        vy += ay; 
 + 
 +        if(sprite != null) { 
 +            sprite.verschieben(vx,​ vy); 
 +            sprite.drehen(vx*2);​ 
 +        } 
 +    } 
 + 
 +    @Override 
 +    public void kunststück() { 
 +        sprite.animiereStreckung(1.5,800); 
 +    } 
 +
 +</​code>​ 
 + 
 +===== Klasse AutoNeu ===== 
 +<code java> 
 +public class AutoNeu extends BewegtesObjekt1 { 
 + 
 +    public AutoNeu(double x, double y){ 
 + 
 +        super(x, y, Math.random() * 3 +1, 0, 0, 
 +                "/​vererbung/​car2.png"​);​ 
 + 
 +    } 
 + 
 + 
 +    @Override 
 +    public void kunststück() { 
 +        sprite.animiereVerschiebung(0,​-30,​500);​ 
 +        sprite.animiereVerschiebung(0,​30,​500).nach(500);​ 
 +    } 
 +
 +</​code>​ 
 + 
 +===== Klasse MotorradNeu ===== 
 +public class MotorradNeu extends BewegtesObjekt1 { 
 + 
 +    public MotorradNeu(double x, double y){ 
 + 
 +        super(x, y, Math.random() * 6 +2, 0, 0, 
 +                "/​vererbung/​motorbike.png"​);​ 
 + 
 +    } 
 + 
 +    @Override 
 +    public void kunststück() { 
 +        sprite.animiereDrehungImUhrzeigersinnUm(sprite.getMitteX(),​ sprite.getMitteY(),​ 
 +                70, 900); 
 +        sprite.animiereDrehungImUhrzeigersinnUm(sprite.getMitteX(),​ sprite.getMitteY(),​ 
 +                -70, 900).nach(1000);​ 
 +    } 
 +
 + 
 +===== Methode timerSignalVerarbeiten() in der Klasse AnimationStarter ===== 
 +<code java> 
 +    @Override 
 +    public void timerSignalVerarbeiten() { 
 + 
 +        i++; 
 +        if(i % 10 == 0){ 
 +            figuren.add(new Stern1(300, 600)); 
 +            figuren.add(new Auto1(0, Math.random() * 600)); 
 +            figuren.add(new Motorrad1(0,​ Math.random() * 600)); 
 +        } 
 + 
 +        for(int i 0; i < figuren.size();​ i++){ 
 +            BewegtesObjekt1 a figuren.get(i);​ 
 +            if(a.istAußerhalbDesFensters()){ 
 +                figuren.remove(a);​ 
 +                a.vernichten();​ 
 +            } 
 +            a.zeitschritt();​ 
 +            if(Math.random() > 0.99){ 
 +                // Neu: 
 +                a.kunststück();​ 
 +            } 
 +        } 
 +    } 
 +</​code>​
  
Drucken/exportieren
QR-Code
QR-Code schule:klassen:2017:10b:kap12 (erstellt für aktuelle Seite)