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() :
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 :
- L’expression this() doit toujours être la première ligne du constructeur.
- Il devrait y avoir au moins un constructeur sans le mot clé this() (constructeur 3 dans l’exemple ci-dessus).
- 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.