Learning By Doing Konstruktoren Gleicher Name wie die
Learning By Doing Konstruktoren • Gleicher Name wie die Klasse • Kein Rückgabewert, daher kein Rückgabetyp • Wir immer bei der Objekterzeugung mit new automatisch ausgeführt • Zur Initialisierung des Objekts, insbesondere mit Parametern • Ohne Parameter: Standardkonstruktor (default constructor) • Kann entfallen (es wird ein vordefinierter Standardkonstruktor verwendet) • Wird oft überladen, um verschiedene Initialisierungen (mit mehr oder weniger vielen Standardwerten) zu ermöglichen • Kann nicht wie ein gewöhnliche Methode aufgerufen werden • Überladene Konstruktoren können mit this(. . . ) am Anfang des Konstruktors verwendet werden • Konstruktoren der Superklasse (Basisklasse) können mit super(. . . ) am Anfang des Konstruktors verwendet werden. Fehlt dieser Aufruf, so wird automatisch der Standardkonstruktor der Basisklasse verwendet
Learning By Doing Musterbeispiel für Konstruktoren // Stern. java import java. awt. geom. *; import java. awt. *; import ch. aplu. util. *; public class Stern { private GPanel p; // 2 gleichseitige Dreiecke mit Mitte in mx, my private General. Path gp 1, gp 2; private int r; // Umkreisradius private int mx, my; // Mitte private Color color; // Farbe public Stern(GPanel p, int r, Color color) { this. p = p; this. r = r; this. color = color; mx = 0; // Mitte in (0, 0) my = 0; gp 1 = new General. Path(); gp 1. move. To(r, 0); gp 1. line. To((int)( -0. 5 * r), (int)(0. 866 * r)); gp 1. line. To((int)( -0. 5 * r), (int)( -0. 866 * r)); gp 1. close. Path(); gp 2 = new General. Path(); gp 2. move. To( -r, 0); gp 2. line. To((int)(0. 5 * r), (int)(0. 866 * r)); gp 2. line. To((int)(0. 5 * r), (int)( -0. 866 * r)); gp 2. close. Path(); }
Learning By Doing public void rotate(double angle) { Affine. Transform at = new Affine. Transform(); at. rotate(angle, mx, my); gp 1. transform(at); gp 2. transform(at); } public void move. At(int mx, int my) { Affine. Transform at = new Affine. Transform(); at. translate(mx - this. mx, my - this. my); gp 1. transform(at); gp 2. transform(at); this. mx = mx; this. my = my; } public void show. Me() { p. color(color); p. fill. General. Path(gp 1); p. fill. General. Path(gp 2); } } public static void main(String[] args) { GPanel p = new GPanel(0, 500, 0, 500); Stern s = new Stern(p, 50, Color. red); s. move. At(250, 250); s. show. Me(); } Animation ohne Flackern (Doppelbufferung) public static void main(String[] args) { GPanel p = new GPanel(0, 500, 0, 500); Stern s = new Stern(p, 50, Color. red); s. move. At(250, 250); p. enable. Repaint(false); while (true) { s. rotate(1); s. show. Me(); p. repaint(); Console. delay(100); p. clear(); } }
- Slides: 3