Kreis c = new Kreis();
Ablauf:
Konstruktoren initialisieren Objekte.
Wichtige Eigenschaften:
public Kreis (double x, double y, double r) { this.x = x; // 'this' löst this.y = y; // Namens- this.r = r; // konflikt } ... Kreis c = new Kreis(1.4,2.0.5.3);
Der parameterlose Konstruktor
Kreis();heißt Default-Konstruktor. Er wird vom Compiler zur Verfügung gestellt, falls es keinen Benutzer-definierten Konstruktor gibt.
Der Compiler-generierte Default-Konstruktor ruft lediglich den Default-Konstruktor der Oberklasse auf.
Wir bekommen also Compiler-Fehlermeldungen,
this findet in Konstruktoren Anwendung, die andere Konstruktoren verwenden:
public Kreis (double x, double y, double r) { this.x = x; this.y = y; this.r = r; } public Kreis(double r) { this(0.0, 0.0, r); } public Kreis(Kreis c) { this(c.x, c.y, c.r); } public Kreis() { this(0.0, 0.0, 1.0); }
Andere typische Anwendungen von this siehe
Seite und Seite
.
Solche Aufrufe anderer Konstruktoren stehen vor anderen Anweisungen im Konstruktorrumpf.
Solch ein expliziter Konstruktor-Aufruf über this
All dieses führt zu Compiler-Fehlermeldungen.
public class tisch { bein[] beine; int anz_beine; public tisch() { this(anz_beine-1); // FALSCH! } public tisch(int n) { anz_beine = n; } }
Der Java-Compiler meldet:
Can't reference anz_beine before the superclass constructor has been called. { this(anz_beine-1); ^