retour). L'opération permettant de définir plusieurs constructeurs du même nom s'appelle la
surdéfinition.
Lorsqu'une fonction a été surdéfinie, le compilateur saura quelle fonction appeler en examinant les
arguments d'appel de cette fonction (dans certains cas, le compilateur peut être amené à faire des
conversions de type, comme par exemple passer d'un short à un int).
Maintenant que nous avons présenté en détail le contenu d'une classe, il est grand temps de voir
comment on peut créer un objet à partir d'une classe.
6. L'instanciation et l'utilisation des objets
L'opération permettant de créer un objet à partir d'une classe s'appelle l'instanciation. On dit qu'on
instancie (i.e. on crée) un objet.
La création d'un objet consiste tout simplement à réserver un certain espace mémoire, contenant,
entre autres, les données membres définies dans la classe dont l'objet est issu.
Cependant, s'il est intéressant de pouvoir créer un objet, il est encore mieux de pouvoir l'utiliser.
Pour ce faire, on doit disposer d'une variable permettant d'y faire référence. Cette variable est
parfois appelée un handle, elle contient une référence à l'objet, mais ce n'est pas l'objet en lui-
même. Précisons ces notions grâce à un exemple :
Voiture Clio; // Ces 2 lignes sont équivalentes à
Clio = new Voiture(); // Voiture Clio = new Voiture();
Ici, on définit tout d'abord une référence à un objet de type Voiture. Cette référence s'appelle Clio.
Pour le moment, aucun objet n'a été créé. On a juste défini une référence pour un objet de type
Voiture.
C'est via la deuxième ligne que l'on va créer l'objet de type Voiture, accessible grâce à la variable
Clio. En Java, comme en C++, on utilise le mot clé new pour créer un objet à partir de la classe
spécifiée en argument.
Ce mot clé a pour effet de :
créer un objet,
appeler le constructeur de cet objet, s'il en existe un, ou utiliser celui par défaut,
renvoyer une référence à l'objet nouvellement créé, permettant ainsi de le manipuler.
Dans le cas de la classe Voiture, il n'existe pas de constructeur, c'est donc le constructeur par défaut
qui est appelé. Si on reprend le cas de la classe Exemple, il est possible d'appeler le deuxième
constructeur que nous avons défini plus haut, en procédant de la façon suivante :
Exemple expl = new Exemple(1997);
Cette fois-ci, on a passé la valeur 1997 en argument, cette valeur sera affectée à la donnée membre
val définie plus haut, dans la classe Exemple.
Voyons maintenant comment on peut manipuler un objet.
Manipuler signifie accéder aux données d'un objet ou appeler une méthode de cet objet (i.e. lui
envoyer un message). Dans les deux cas, on utilise en Java l'opérateur "." séparant le nom de l'objet
du nom du membre auquel on veut accéder.
Exemple :
Clio.Vitesse = 1;
Clio.DiminueVitesse();
A la première ligne, nous modifions la variable Vitesse de l'objet, en lui attribuant la valeur 1. A la
deuxième, nous appelons la méthode DiminueVitesse qui va donc remettre à 0 la variable Vitesse
considérée (rappelons que cette méthode diminue d'une unité la variable Vitesse).
Il est important de remarquer que, en Java, il n'existe pas de mot clé permettant de détruire un objet
qui n'est plus utilisé. Cette opération est en effet effectuée automatiquement par le garbage
collector, processus que nous avons présenté dans le chapitre dédié à la Machine Virtuelle Java.
Cela simplifie d'autant plus la programmation qu'il est alors impossible de désallouer par erreur un
objet toujours utilisé dans une autre partie d'un programme, comme cela pouvait être le cas en C++.