learning by doing konstruktoren gleicher name wie die klasse zur initialisierung des objekts,...

3
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 verwe • Ohne Parameter: Standardkonstruktor (default constructor) Wird oft überladen, um verschiedene Initialisierungen (mit mehr ode weniger vielen Standardwerten) zu ermöglichen • Kann nicht wie ein gewöhnliche Methode aufgerufen werden Überladene Konstruktoren können mit this(...) am Anfang des Konstru verwendet werden • Konstruktoren der Superklasse (Basisklasse) können mit super(...) am Anfang des Konstruktors verwendet werden. Fehlt dieser Aufruf, wird automatisch der Standardkonstruktor der Basisklasse verwendet

Upload: heinrike-helmer

Post on 06-Apr-2015

102 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung

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

Page 2: Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung

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

Page 3: Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung

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