konstruktoren

Werbung
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 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();
}
h
s  3 *r
y
3
*r
2
0.866r
r/2
r
x
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();
}
}
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.moveAt(250, 250);
p.enableRepaint(false);
while (true)
{
s.rotate(1);
s.showMe();
p.repaint();
Console.delay(100);
p.clear();
}
}
Herunterladen