Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
schule:klassen:2017:10b:kap12 [2018/06/13 11:57] – martin | schule:klassen:2017:10b:kap12 [2021/12/29 10:40] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Abstrakte Basisklassen und abstrakte Methoden ====== | ||
+ | Im vorangegangenen Kapitel wurde die Methode '' | ||
+ | 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, | ||
+ | Wir denken uns eine Methode '' | ||
+ | ===== Abstrakte Klasse BewegtesObjekt ===== | ||
+ | <code java> | ||
+ | public abstract class BewegtesObjekt { | ||
+ | |||
+ | // Beginn der Klasse wie im vorigen Kapitel gezeigt. | ||
+ | // Neu ist: | ||
+ | |||
+ | abstract public void kunststück(); | ||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 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, "/ | ||
+ | |||
+ | } | ||
+ | |||
+ | public void zeitschritt(){ | ||
+ | |||
+ | vy += ay; | ||
+ | |||
+ | if(sprite != null) { | ||
+ | sprite.verschieben(vx, | ||
+ | sprite.drehen(vx*2); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void kunststück() { | ||
+ | sprite.animiereStreckung(1.5, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Klasse AutoNeu ===== | ||
+ | <code java> | ||
+ | public class AutoNeu extends BewegtesObjekt1 { | ||
+ | |||
+ | public AutoNeu(double x, double y){ | ||
+ | |||
+ | super(x, y, Math.random() * 3 +1, 0, 0, | ||
+ | "/ | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | @Override | ||
+ | public void kunststück() { | ||
+ | sprite.animiereVerschiebung(0, | ||
+ | sprite.animiereVerschiebung(0, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Klasse MotorradNeu ===== | ||
+ | <code java> | ||
+ | public class MotorradNeu extends BewegtesObjekt1 { | ||
+ | |||
+ | public MotorradNeu(double x, double y){ | ||
+ | |||
+ | super(x, y, Math.random() * 6 +2, 0, 0, | ||
+ | "/ | ||
+ | |||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void kunststück() { | ||
+ | sprite.animiereDrehungImUhrzeigersinnUm(sprite.getMitteX(), | ||
+ | 70, 900); | ||
+ | sprite.animiereDrehungImUhrzeigersinnUm(sprite.getMitteX(), | ||
+ | -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, | ||
+ | } | ||
+ | |||
+ | for(int i = 0; i < figuren.size(); | ||
+ | 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(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||