Chaînage des constructeurs                        

Chaînage des constructeurs

           

Un constructeur est sert à construire des objets selon le modèle de la classe qui le contient. Quand on instancie une classe, on appelle nécessairement un constructeur de cette classe, ce qui fait que toute classe possède au moins un constructeur.
Un constructeur a toujour même nom que la classe et n'indique pas de valeur explicite de retour ; il renvoie en fait l'adresse de l'objet construit. Toujours appelé quand on instancie une classe. Si une classe n'indique dans son code aucun constructeur, le compilateur en ajoute automatiquement un. Ce constructeur ajouté, s'il s'agit de la classe MaClasse, a la forme suivante :
class MaClasse {
   MaClasse() {
      super();
   }
  ...   
}
Tout constructeur, sauf celui de la classe java.lang.Object, fait appel à un autre constructeur qui est : Cet appel est mis nécessairement en première ligne du constructeur. En cas d'absence de cet appel, le compilateur ajoute super(); en première ligne du constructeur.

On peut regarder l'exemple suivant, qui sert d'exercice. Il s'agit de savoir quelle est la sortie de la méthode main de la classe EssaiSuper

class A {
   A() {
      System.out.println("constructeur de A");
   }
}

class B extends A {
   B(){
      System.out.println("constructeur de B");
   }

  B(int r) {
      this(); 
      System.out.println("autre constructeur de B");
   }
}

class C extends B {
  C() {
      super(3); 
      System.out.println("constructeur de C");
   }
}

class EssaiChainage {
   public static void main(String[] argv) {
      new C();
   }
}

Le fichier EssaiChainage.java


this(); : c'est un appel au constructeur sans paramètre de la même classe, c'est-à-dire de la classe B.
super(3); : c'est un appel au constructeur avec un paramètre de type int de la superclasse classe, c'est-à-dire de la classe B.

© Irène Charon Télécom ParisTech 2010