Una classe può avere più costruttori…
public class SuperSuperClasse { protected int ssc; public SuperSuperClasse() { ssc=1; System.out.println("SuperSuperClasse 1: ssc="+ssc); } public SuperSuperClasse(int ssx) { ssc=ssx; System.out.println("SuperSuperClasse 2: ssc="+ssc); } }
public class SuperClasse extends SuperSuperClasse { protected int sc; public SuperClasse() { sc=2; System.out.println("Super Classe 1: ssc="+ssc+", sc="+sc); } public SuperClasse(int sx, int sy) { super(sx); sc=sy; System.out.println("Super Classe 2: ssc="+ssc+", sc="+sc); } }
public class Classe extends SuperClasse { protected int c; public Classe() { c=3; System.out.println("Classe 1: ssc="+ssc+", sc="+sc+", c="+c); } public Classe(int x, int y, int z) { super(x, y); c=z; System.out.println("Classe 2: ssc="+ssc+", sc="+sc+", c="+c); } }
Se si istanziano le classi si può scegliere quale catena di costruttori utilizzare
public class CostruttoriTest3 { public static void main(String args[]) { SuperSuperClasse s_s_classe1 = new SuperSuperClasse(); System.out.println(); SuperClasse s_classe1 = new SuperClasse(); System.out.println(); Classe classe1 = new Classe(); System.out.println(); System.out.println(); SuperSuperClasse s_s_classe2 = new SuperSuperClasse(5); System.out.println(); SuperClasse s_classe2 = new SuperClasse(5, 10); System.out.println(); Classe classe2 = new Classe(5, 10, 15); } }
L’output della classe di test è
SuperSuperClasse 1: ssc=1 SuperSuperClasse 1: ssc=1 Super Classe 1: ssc=1, sc=2 SuperSuperClasse 1: ssc=1 Super Classe 1: ssc=1, sc=2 Classe 1: ssc=1, sc=2, c=3 SuperSuperClasse 2: ssc=5 SuperSuperClasse 2: ssc=5 Super Classe 2: ssc=5, sc=10 SuperSuperClasse 2: ssc=5 Super Classe 2: ssc=5, sc=10 Classe 2: ssc=5, sc=10, c=15
Nota
La presenza del costruttore di default permette di scegliere quale catena di costruttori attivare. Prova a fare la modifica
public SuperClasse(int sx, int sy) { //super(sx); sc=sy; System.out.println("Super Classe 2: ssc="+ssc+", sc="+sc); }
e osserva l’output della classe di prova…