Catena di costruttori #3

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…