GeeksforGeeks

Prérequis – Constructeurs en Java
Le chaînage de constructeurs est le processus d’appel d’un constructeur à partir d’un autre constructeur par rapport à l’objet en cours.
Le chaînage du constructeur peut être effectué de deux manières:

  • Dans la même classe: Cela peut être fait en utilisant le mot-clé this() pour les constructeurs de la même classe
  • de la classe de base: en utilisant le mot-clé super() pour appeler le constructeur de la classe de base.

Le chaînage du constructeur se fait par héritage. La tâche d’un constructeur de sous-classe est d’appeler d’abord le constructeur de la super classe. Cela garantit que la création de l’objet de la sous-classe commence par l’initialisation des membres de données de la super classe. Il pourrait y avoir n’importe quel nombre de classes dans la chaîne d’héritage. Chaque constructeur appelle la chaîne jusqu’à ce que la classe en haut soit atteinte.

Pourquoi avons-nous besoin d’un chaînage de constructeur ?
Ce processus est utilisé lorsque nous voulons effectuer plusieurs tâches dans un seul constructeur plutôt que de créer un code pour chaque tâche dans un seul constructeur, nous créons un constructeur séparé pour chaque tâche et rendons leur chaîne ce qui rend le programme plus lisible.

Chaînage du constructeur dans la même classe en utilisant le mot-clé this() :

 Chaînage Du Constructeur En Java

class Temp
{
Temp()
{
this(5);
System.out.println("The Default constructor");
}
Temp(int x)
{
this(5, 15);
System.out.println(x);
}
Temp(int x, int y)
{
System.out.println(x * y);
}
public static void main(String args)
{
new Temp();
}
}



Sortie:

755The Default constructor

Règles de chaînage du constructeur :

  1. L’expression this() doit toujours être la première ligne du constructeur.
  2. Il devrait y avoir au moins un constructeur sans le mot clé this() (constructeur 3 dans l’exemple ci-dessus).
  3. Le chaînage du constructeur peut être réalisé dans n’importe quel ordre.

Que se passe-t-il si nous changeons l’ordre des constructeurs?

Rien, le chaînage du constructeur peut être réalisé dans n’importe quel ordre

class Temp
{
Temp()
{
System.out.println("default");
}
Temp(int x)
{
this();
System.out.println(x);
}
Temp(int x, int y)
{
this(5);
System.out.println(x * y);
}
public static void main(String args)
{
new Temp(8, 10);
}
}



Sortie:

default580

NOTE: Dans l’exemple 1, le constructeur par défaut est appelé à la fin, mais dans l’exemple 2, le constructeur par défaut est appelé au début. Par conséquent, l’ordre dans le chaînage du constructeur n’est pas important.

Chaînage du constructeur à une autre classe à l’aide du mot clé super() :

class Base
{
String name;
Base()
{
this("");
System.out.println("No-argument constructor of" +
" base class");
}
Base(String name)
{
this.name = name;
System.out.println("Calling parameterized constructor"
+ " of base");
}
}
class Derived extends Base
{
Derived()
{
System.out.println("No-argument constructor " +
"of derived");
}
Derived(String name)
{
super(name);
System.out.println("Calling parameterized " +
"constructor of derived");
}
public static void main(String args)
{
Derived obj = new Derived("test");
}
}



Sortie:

Calling parameterized constructor of baseCalling parameterized constructor of derived

Remarque : Similaire au chaînage du constructeur dans la même classe, super() doit être la première ligne du constructeur car le constructeur de la super classe est appelé avant le constructeur de la sous-classe.

Méthode alternative: en utilisant le bloc d’initialisation:
Lorsque nous voulons que certaines ressources communes soient exécutées avec chaque constructeur, nous pouvons mettre le code dans le bloc d’initialisation. Le bloc Init est toujours exécuté avant tout constructeur, chaque fois qu’un constructeur est utilisé pour créer un nouvel objet.

Exemple 1:

class Temp
{
{
System.out.println("init block");
}
Temp()
{
System.out.println("default");
}
Temp(int x)
{
System.out.println(x);
}
public static void main(String args)
{
new Temp();
new Temp(10);
}
}



Sortie:

init blockdefaultinit block10

REMARQUE: S’il y a plusieurs blocs, ils sont exécutés dans l’ordre dans lequel ils sont définis dans la même classe. Voir l’ex.
Exemple :

class Temp
{
{
System.out.println("init");
}
Temp()
{
System.out.println("default");
}
Temp(int x)
{
System.out.println(x);
}
{
System.out.println("second");
}
public static void main(String args)
{
new Temp();
new Temp(10);
}
}



Sortie :

initseconddefaultinitsecond10

Cet article a été rédigé par Apoorva singh. Si vous aimez GeeksforGeeks et souhaitez contribuer, vous pouvez également écrire un article en utilisant contribute.geeksforgeeks.organisez ou envoyez votre article à [email protected] . Consultez votre article apparaissant sur la page principale de GeeksforGeeks et aidez d’autres Geeks.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.