Costruttori multipli
DOMANDA:
In Java si può chiamare un costruttore da un altro costruttore?
RISPOSTA:
Certamente. In questo post vedremo il modo più elegante per evitare ridondanza di codice e massimizzare la manutenibilità delle nostre classi. Tutto quello che c'è da sapere è la parola chiave this(args) che viene utilizzata per richiamare il costruttore dell'oggetto stesso. Ovviamente args sono gli eventuali parametri da passare al costruttore e che identificano la sua firma.
Il modo migliore è partire dal costruttore con meno argomenti richiamando via via quello più corposo.
Vediamolo con un esempio (classe Costruttori.java):
package costruttori;
public class Costruttori {
private int x;
private int y;
private int z;
// primo costruttore
public Costruttori() {
this(3); //richiamo il secondo
}
// secondo costruttore
public Costruttori(int x) {
this(x, 4); //richiamo il terzo
}
// terzo costruttore
public Costruttori(int x, int y) {
this(x, y, 5); //richiamo quello completo
}
// costruttore completo
public Costruttori(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
public void stampa() {
System.out.println("x=" + x + " y=" + y + " z=" + z);
}
}
public class Costruttori {
private int x;
private int y;
private int z;
// primo costruttore
public Costruttori() {
this(3); //richiamo il secondo
}
// secondo costruttore
public Costruttori(int x) {
this(x, 4); //richiamo il terzo
}
// terzo costruttore
public Costruttori(int x, int y) {
this(x, y, 5); //richiamo quello completo
}
// costruttore completo
public Costruttori(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
public void stampa() {
System.out.println("x=" + x + " y=" + y + " z=" + z);
}
}
E la classe di Test (TestCostruttori.java):
package costruttori;
public class TestCostruttori {
public static void main(String[] args) {
// uso il primo costruttore
Costruttori c = new Costruttori();
c.stampa();
// uso il secondo costruttore
c = new Costruttori(1);
c.stampa();
// uso il terzo costruttore
c = new Costruttori(50, 51);
c.stampa();
// uso il costruttore completo
c = new Costruttori(10, 20, 30);
c.stampa();
}
}
public class TestCostruttori {
public static void main(String[] args) {
// uso il primo costruttore
Costruttori c = new Costruttori();
c.stampa();
// uso il secondo costruttore
c = new Costruttori(1);
c.stampa();
// uso il terzo costruttore
c = new Costruttori(50, 51);
c.stampa();
// uso il costruttore completo
c = new Costruttori(10, 20, 30);
c.stampa();
}
}
L'output della classe di Test sarà:
x=3 y=4 z=5
x=1 y=4 z=5
x=50 y=51 z=5
x=10 y=20 z=30
x=1 y=4 z=5
x=50 y=51 z=5
x=10 y=20 z=30
Come è facile intuire, per effettuare delle modifiche al comportamento del costruttore, basta modificare quello completo dove è racchiusa tutta la logica della costruzione dell'oggetto.
Questo commento è stato eliminato da un amministratore del blog.
RispondiElimina