Tutoriel JAVA N°10 : surcharge et redéfinition

JPG - 15.4 ko

Avec Objis, spécialiste Java depuis 2005, maîtrisez les notions clés de ’Surcharge’ et de ’Redéfinition’ en Java. Comprenez la différence entre ces notions, ainsi que leur cas d’utilisation.

Auteur

- Douglas MBIANDOU. Président Objis . Concepteur formation ’Nouveautés Java 8 et 9’

Prérequis

- le tutoriel Mettre en œuvre la notion d’héritage en Java

Objectifs

- Modifier l’implémentation du digramme de classes UML
- Mise en œuvre de la surcharge
- Mise en œuvre de redéfinition et du polymorphysme

Programme

- Partie 1 : Diagramme UML
- Partie 2 : Surcharge
- Partie 3 : Redéfinition
- conclusion

Durée

- 30 minutes.

Partie 1 : Diagramme UML

- Implémentation du diagramme de classes UML suivant

tuto-9-img-5

- Les attributs soulignés de la classe DemandeFormation , correspondent à des attributs static. Pour mémoire , ces attributs sont accessibles en dehors de toute instanciation .

tuto-9-img-6

Partie 2 : La surcharge

La surcharge d’une méthode ou d’un constructeur permet de définir plusieurs fois une même méthode/constructeur avec des arguments différents. Le compilateur choisit la méthode qui doit être appelée en fonction du nombre et du type des arguments .

Surcharge de constructeur

- Surcharger les constructeurs de Employe , Manager et DemandeFormation via le mot clef java this

Exemple 1 :

tuto-9-img-7

Exemple 2 :

tuto-9-img-8

- Expliquez

Partie 3 : La redéfinition

La redéfinition d’une méthode héritée doit impérativement conserver la déclaration de la méthode parent (type et nombre de paramètres, la valeur de retour et les exceptions propagées doivent être identiques).

Si la signature de la méthode change, ce n’est plus une redéfinition mais une surcharge. Cette nouvelle méthode n’est pas héritée : la classe mère ne possède pas de méthode possédant cette signature .

La redéfinition de la méthode demanderFormation dans la classe Manager exprime le fait que le savoir faire métier est différent dans les deux classes :

— La méthode demanderFormation() pour l’employé déclenche une demande avec une attente de validation.
— La méthode demanderFormation() pour le manager déclenche une demande qui est automatiquement validée .

- Redéfinir la méthode demanderFormation() de la classe Manager

Exemple :

tuto-9-img-9

On constate qu’une partie du code de demanderFormation() est identique dans les deux classes Employe et Manager . Pour éviter la duplication de code , une bonne façon de faire est la suivante :

tuto-9-img-10

- Redéfinir la méthode toString() héritée de la super classe Object, afin de tracer les caractéristiques d’un objet

tuto-9-img-11

- La méthode toSring() est automatiquement invoquée lorsque l’on souhaite tracer un objet.

tuto-9-img-12

- Renverra la chaîne :

tuto-9-img-13

Par défaut la méthode toString() retourne le nom de la classe d’instanciation de l’objet, suivi de sa référence.

- Modifier le lanceur LanceurGestionFormations afin de :

    • procéder à différentes instanciations (différents constructeurs)
    • tracer l’état des objets

- Tester le lanceur LanceurGestionFormations et vérifier la redéfinition de la méthode demanderFormation .

Correction

Zip - 11.6 ko
GestionFormations-Surcharge-Redefinition

Conclusion

Dans ce tutoriel vous avez mis en œuvre la notion de surcharge et de redéfinition. Dans le tutoriel suivant ’tutoriel Java N°11’, vous allez découvrir comment manipuler des collections d’objets en java’.

Donner votre avis sur ce Tuto objis.com

Professionnels : maîtrisez les nouveautés Java 8 et 9 !

JPG - 8.3 ko

A travers notre nouvelle formation Nouveautés Java 8 et 9 (durée 4 jours) conçue par l’auteur de ce tutoriel, découvrez par la pratique le nouveau système de Modules Java 9 (Encapsulation forte + Intercafes + Dépendances explicites) ainsi que les spécificités de Java 8 (Streams, Lambda, Optional...). Maîtrisez également la méthodologie de migration de votre code vers Java 9. Un sérieux atout pour votre employabilité et l’évolution de votre carrière professionnelle !. Contactez-nous dès maintenant !