Utilisation d'un constructeur

En première approche, le constructeur d'une classe peut être vu comme une "méthode" spéciale, qui est appelée à chaque instanciation d'un objet. On s'en sert généralement pour initialiser les attributs d'un nouvel objet.

Pour illustrer ceci, nous allons voir une nouvelle version de la classe Voiture utilisant un constructeur. Cet exemple, se trouve dans le projet Voiture2 du répertoire Exemple/Exemple-Java-ProgObjet1.

Déclaration d'un constructeur en Java

En Java, un constructeur se déclare comme une méthode sans type de retour (ni void ni autre chose) de même nom que la classe.

Voici par exemple la déclaration du constructeur de la classe Voiture dans le projet Voiture2:

Voiture (String im)
{
  Compteur = 0; Immat = im; 
 }

Les deux instructions figurant dans le corps cette méthode servent à initialiser les attributs Immat et Compteur d'une nouvelle voiture.

On suppose qu'une nouvelle voiture a toujours 0 km au compteur. L'attribut Compteur est donc systématiquement initialisé avec la valeur 0. Quand au numéro d'immatriculation, c'est celui qui sera passé en paramètre au moment de l'appel du constructeur.

Appel du constructeur d'une classe

Pour appeler le constructeur d'une classe, il suffit de préciser la valeur de ses paramètres effectifs dans l'instruction d'instanciation. Par exemple, pour créer une nouvelle voiture d'immatriculation "4017 ZX 67" avec le constructeur défini précédement, on pourra écrire:

 LaVoiture = new Voiture ("4017 ZX 67");

L'effet de cette instruction sera de créer une nouvelle instance de la classe Voiture, de lui appliquer le constructeur de la classe avec le paramètre effectif "4017 ZX 67" et de mémoriser l'adresse du nouvel objet créé dans la variable LaVoiture. La nouvelle voiture crée aura donc dès le départ des attributs initialisés: son attribut Immat sera intialisé à "4017 ZX 67" et son attribut Compteur à 0.

On peut bien sur faire la même chose sans constructeur (voir projet Voiture1), mais d'un point de vu pratique l'utilisation d'un constructeur évitera la répétition inutile de code (instanciation + initialisation) à chaque création d'un nouvel objet. De plus, l'utilisation d'un constructeur respecte mieux le principe d'encapsulation, un concept fondamental de la programmation objet que nous aborderons plus loin.

Notez que le constructeur ne peut pas être appelé explicitement. C'est à dire qu'on ne peut pas écrire:

 LaVoiture.Voiture ("4017 ZX 67");

Pour être rigoureux, on ne peut donc pas considérer que le constructeur d'une classe est une de ses méthodes.

Pour terminer, voici le nouveau code de la procédure évènementielle du bouton "Nouvelle Voiture" dans le projet Voiture2:

private void BT_CreerActionPerformed(...) {                                         
 LaVoiture = new Voiture (es.Lire (CT_Immat));
 LaVoiture.AfficherAttributs();   
 } 

que l'on peut comparer au code de la même procédure dans le projet Voiture1:

private void BT_CreerActionPerformed(...) {                                         
    LaVoiture = new Voiture ();
    LaVoiture.Immat= es.Lire (CT_Immat);
    LaVoiture.Compteur=0;
    LaVoiture.AfficherAttributs();                
  }