Connexion




Programmer Orienté Objet en Java

Par Arthur Martineau


<-- Les variables de classes L'héritage en Java Rendre son code lisible -->


L'héritage en Java


Bien maintenant imaginons que nous voulons créer un objet Voiture plus spécifique, tel qu'un objet Voiture électrique.

Une voiture électrique sera indentique à une voiture classique avec des détails en plus. Il va donc falloir recopier le code de la classe Voiture dans une classe VoitureElectrique, puis ajouter le code qui le différencie de Voiture.

Et plutot que de recopier, il existe l'héritage. Avec cette notion, il y aura un avantage important lorsqu'on devra modifier la classe Voiture. En effet, sans l'héritage, si on doit modifier la classe Voiture, il faudra aussi modifier la classe VoitureElectrique. Alors qu'avec l'héritage, les modifications effectuées sur la classe Voiture seront directement pris en compte sur la classe VoitureElectrique.

 

Avec l'héritage, on va donc pouvoir définir des classe mères et des classes héritées.

Une classe héritée bénéficiera donc de l'ensemble des fonctions de sa classe mère.

 

Trève de blabla et passsons à la réalisation de la classe VoitureElectrique.

 

Afin de mettre en évidence que le mot clef extends permet de créer notre héritage, et donc de pouvoir utiliser les fonctions de la classe Voiture avec un objet VoitureElectrique ; nous allons créer un objet VoitureElectrique et utiliser la méthode description() de la classe Voiture.

En compilant, on voit bien que la méthode description fonctionne sur notre objet VoitureElectrique.

 

Une classe héritée peut donc utiliser les méthodes de la classe mère. Par contre, il faut que les méthodes de la classe mère soient définies en public ou en protected pour que ce soit possible.

Par contre ce n'est pas le cas pour le constructeur. Une classe héritée ne peut pas récupérer le constructeur de sa classe mère.

 

Mais alors comment se fait-il que lors de la compilation, notre objet VoitureElectrique ait bien été créé ?

Il faut savoir que par défaut, lorsqu'aucun constructeur n'est présent dans une classe, au moment de la compilation, le compilateur créé lui-même le constructeur par défaut. C'est pourquoi, lors de notre compilation, l'objet VoitureElectrique a bien été créé.

 

Du coup, le constructeur par défaut de notre classe VoitureElectrique fait appel à celui de la classe Voiture et c'est pourquoi nos variables définissant notre objet existent bel et bien lors de la compilation.

Par contre, nous avons défini ces variables comme des variables privées (grâce au mot clef private). Ce qui signifie, pour rappel, qu'elles ne peuvent pas être utilisées en dehors de la classe où elles sont créés.

 

Essayons donc le code suivant dans votre nouvelle classe.

 

Si vous essayez de compiler ce bout de code, le compilateur va vous retourner une erreur. C'est parce que la variable nom ne peut pas être récupérée à partir de la classe mère, elle ne représente rien dans notre classe VoitureElectrique.

Pour que ce code fonctionne, il faut donc modifier la déclaration des variables dans la classe mère. Remplacez les mots clefs private par protected pour nos 4 variables d'instances (nbVoiture exclu) de la classe Voiture et compilez.

 

Avec cette modification, votre code compile et en plus, la variable nom de votre objet a bien été affecté d'une valeur, dans mon cas "C2". 

Bien maintenant, si nous voulons ajouter une caractéristique à la classe VoitureElectrique, comment allons-nous devoir nous y prendre ?

 

Nous allons avoir besoin d'utiliser le mot clef super qui permet de récupérer les éléments de la classe mère.

Le code ci-dessous fait exactement la même chose que si vous aviez recopié le contenu du constructeur par défaut de Voiture dans VoitureElectrique en y ajoutant un nouveau champ autonomie.

 

Le mot clef super s'utilise aussi pour une autre méthode que le constructeur par défaut, nous pouvons par exemple faire évoluer notre méthode d'affichage.

 

Ici, super permet de récupérer la méthode description de la classe Voiture afin d'en créer une améliorée dans la classe VoitureElectrique. N'hésitez pas à compiler afin d'obeserver le résultat.

Si vous avez bien suivi ce que nous avons fait dans les parties précédentes, vous savez ce qu'il nous reste à faire :

 

Réaliser le constructeur d'initialisation

 

Ajouter l'accesseur et le mutateur pour la variable autonomie.

 

Vous pouvez maintenant tester votre nouvelle classe :

Vous obtenez bien un affichage permettant d'afficher l'ensemble des valeurs caractérisant VoitureElectrique.

Nous allons maintenant apprendre à utiliser les packages et les commentaires JavaDoc.



<-- Les variables de classes L'héritage en Java Rendre son code lisible -->