Was ist zu beachten, falls eine Java-Klasse mehrere Konstruktoren besitzen soll?

... komplette Frage anzeigen

3 Antworten

Was zusätzlich noch zu 57497's Antwort beachtet werden soll: 

Wenn du deine Klasse entwirfst, musst du dir im klaren darüber sein, ob die Konstruktoren unabhängig voneinander sein sollen oder nicht.

Sagen wir mal du hast eine Klasse in der die String-Instanz-Variable: meinText deklariert aber nicht initialisiert ist. 

nun hast du zwei Konstruktoren und dein Plan wäre es deine Variable im Konstruktor zu initialisieren. So würde das entweder bedeuten du machst das so:

a.

public MeineKlasse(String meinText) {
    this.meinText = meinText;
}

b.

public MeineKlasse() {
   meinText = "";
}

Oder du Referenzierst auf den Konstruktor, der dir am wichtigsten ist, z.B.

a.

public MeineKlasse(String meinText) {
    this.meinText = meinText;
}
b.
public MeineKlasse() {
   this("");
}
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
15.12.2015, 10:29

Constructor-Chaining hätte ich auch hervorgehoben, um a) doppelten Code zu vermeiden, und b) eine korrekte Initialisierung aller Member sicher zu stellen.

Gute Antwort! :)

1

Die Konstruktoren müssen halt andere werte bei der Übergabe haben, dann wird immer der genommen, der "gleich" damit ist.

Also:
public class Test() {

}

public class Test(int numer) {

}

public class Test(int number, String name) {

}
...

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Sperber963
14.12.2015, 21:14

sweet danke und wenn wir schon dabei sind weist du, was  die Eigenschaften einer abgeleiteten Klasse in Java in Bezug auf ihre Basisklasse sind?

0

Generell bei Methoden (also auch bei Konstruktoren), die mehrere Signaturen besitzen, spricht man auch von Overloading oder von statischem Polymorphismus (Siehe hier http://www.programmieraufgaben.ch/uploads/oo.pdf Seite 107). Hierbei kann bereits der Compiler herausfinden, welche Methode denn aufgerufen werden muss.


Nun, "was gibt es zu beachten"?

Manchmal ist dies jedoch dennoch nicht möglich und der Compiler meldelt einen "ambigous"-Aufruf (also eine Zweideutigkeit). Am besten sieht man das hier

public Construct(int a, float b) {...}

public Construc(float a, int b) {...}

Kein Problem bei Aufrufen wie

Construct c1 = new Construct(1, 1.5);

Construct c2 = new Construct(0.8, 1);

Jedoch hier gibt es ein Problem:

Construct c3 = new Construct(4, 5);

Welchen Konstruktor soll der Compiler nun nehmen?


Antwort bewerten Vielen Dank für Deine Bewertung