Le constructeur: une méthode particulière
Le constructeur: une méthode particulière
Pour instancier une classe, c’est-à-dire créer un objet à partir d’une classe, il s’agit d’utiliser l’opérateur new.
En réalité l’opérateur new, lorsqu’il est utilisé, fait appel à une méthode spéciale de la classe: le constructeur. C’est la philosophie objet, il faut “construire” ton objet a partir du plan (la Classe) et sans lui, pas d’objet.
Un constructeur par defaut existe bien (si on en rajoute pas d’autre), il est défini par le compilateur Java si la classe n’en possède pas mais il ne fait rien de plus que de créé l’objet, laissant tous les attributs non initialisés.
A noter qu’un constructeur porte le même nom que la classe dans laquelle il est défini.
Surcharger en Java: méthodes et constructeurs
En Java, le terme Overload signifie qu’il existe plusieurs versions d’un constructeur ou d’une méthode.
Une classe peut avoir plusieurs constructeurs et comme pour n’importe quelle méthode, il est possible de surcharger les constructeurs, c’est-à-dire définir plusieurs constructeurs avec un nombre/type d’arguments différents. Ainsi, il sera possible d’initialiser différemment un même objet, selon la méthode de construction utilisée.
Pourquoi plusieurs constructeurs?
Il existe plusieurs types de constructeurs :
le constructeur avec initialisation fixe : il permet de créer un constructeur par défaut
this.couleurDeBase = "blanche";
le constructeur avec initialisation des variables : pour spécifier les valeurs de données à initialiser on peut les passer en paramètres au constructeur :
this.couleurDeBase = couleurDeBase;
Il est préférable de préfixer la variable d’instance par le mot clé this.
Un petit exemple vaut mieux qu’un grand discours
J’ai une classe voiture, contenant certaines options couleur personnalisé, toit ouvrant, etc..
Je veux pouvoir créer des voitures en définissant la couleur et les options que le client a choisi (Constructeur personnalisé) ou juste une voiture de base sans option (constructeur avec minimum d’option) et dans ce cas la, la couleur est fixée arbitrairement.
public class Voiture { private String couleurDeBase; private String couleurPersonalise; private String optionToit; public Voiture() { // Constructeur avec initialisation fixe this.couleurDeBase = "blanche"; } public Voiture(String couleurPersonalise, String optionToit) { //constructeur avec initialisation des variables this.couleurPersonalise = couleurPersonalise; this.optionToit = optionToit; } }
Allez plus loin, passer un objet en paramètre
Il est possible et parfois utile de passer un objet comme argument à notre constructeur, ce dernier est donc une simple copie.
Exemple : Dans mon cas, j’ai un constructeur warrior qui me permet de construire un guerrier
public class Warrior extends Character { public Warrior(String name, String image) { super(name, image);//je récupere ici les attributs de Character this.life = 5; } }
Ici, je crée un nouveau guerrier avec mon constructeur Warrior
Character duncan = new Warrior("Duncan", "image");
Et ici, je crée un copie de mon guerrier avec mon constructeur GameState
public class GameState { // constructeur par défault public GameState(){ } public GameState(String playerName, Warrior) { this.playerName = playerName; // this.warrior = warrior; this.warrior = new Warrior(Warrior);// J'utilise ici le constructeur avec l'objet en parametre } }
Mais quel est l’intérêt ?
L’interêt dans mon cas est d’éviter de reset tous ses attribut (vie, force) de mon guerrier à chaque nouvelle partie.
Vous êtes arrivé au bout de cet article, j’en conclus qu’il vous a plu, alors envoyez moi un max d’étoiles ⭐⭐⭐⭐⭐, et partagez le avec vos amis et vos connaissances sur les réseaux sociaux, avec les boutons ci-dessous :