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;
  }
}
Il n’est pas possible d’avoir deux méthodes de même nom dont tous les paramètres sont identiques et dont seul le type retourné diffère.

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 :

4.7 (93.33%) 15 vote[s]

Partager cet article sur les réseaux sociaux :

Articles similaires