learning by doing konstruktoren gleicher name wie die klasse zur initialisierung des objekts,...
TRANSCRIPT
Learning By Doing
Konstruktoren
• Gleicher Name wie die Klasse
• Zur Initialisierung des Objekts, insbesondere mit Parametern
• Wir immer bei der Objekterzeugung mit new automatisch ausgeführt
• Kein Rückgabewert, daher kein Rückgabetyp
• Kann entfallen (es wird ein vordefinierter Standardkonstruktor verwendet)
• Ohne Parameter: Standardkonstruktor (default constructor)
• Wird oft überladen, um verschiedene Initialisierungen (mit mehr oderweniger vielen Standardwerten) zu ermöglichen
• Kann nicht wie ein gewöhnliche Methode aufgerufen werden
• Überladene Konstruktoren können mit this(...) am Anfang des Konstruktorsverwendet werden
• Konstruktoren der Superklasse (Basisklasse) können mit super(...) am Anfang des Konstruktors verwendet werden. Fehlt dieser Aufruf, sowird automatisch der Standardkonstruktor der Basisklasse verwendet
Learning By Doing
// 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 GeneralPath gp1, gp2; 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; gp1 = new GeneralPath(); gp1.moveTo(r, 0); gp1.lineTo((int)( -0.5 * r), (int)(0.866 * r)); gp1.lineTo((int)( -0.5 * r), (int)( -0.866 * r)); gp1.closePath(); gp2 = new GeneralPath(); gp2.moveTo( -r, 0); gp2.lineTo((int)(0.5 * r), (int)(0.866 * r)); gp2.lineTo((int)(0.5 * r), (int)( -0.866 * r)); gp2.closePath(); }
Musterbeispiel für Konstruktoren
rr/2
0.866r
y
x
3 *s r3
*2
h r
public static void main(String[] args) { GPanel p = new GPanel(0, 500, 0, 500); Stern s = new Stern(p, 50, Color.red); s.moveAt(250, 250); while (true) { s.rotate(1); s.showMe();
Console.delay(100); p.clear(); } }
public static void main(String[] args) { GPanel p = new GPanel(0, 500, 0, 500); Stern s = new Stern(p, 50, Color.red); s.moveAt(250, 250); p.enableRepaint(false); while (true) { s.rotate(1); s.showMe(); p.repaint(); Console.delay(100); p.clear(); } }
Learning By Doing
public void rotate(double angle) { AffineTransform at = new AffineTransform(); at.rotate(angle, mx, my); gp1.transform(at); gp2.transform(at); }
public void moveAt(int mx, int my) { AffineTransform at = new AffineTransform(); at.translate(mx - this.mx, my - this.my); gp1.transform(at); gp2.transform(at); this.mx = mx; this.my = my; }
public void showMe() { p.color(color); p.fillGeneralPath(gp1); p.fillGeneralPath(gp2); }
public static void main(String[] args) { GPanel p = new GPanel(0, 500, 0, 500); Stern s = new Stern(p, 50, Color.red); s.moveAt(250, 250); s.showMe(); }}
Animationohne Flackern
(Doppelbufferung)
Animation