Programmation orientée objet
Chapitre 5 Héritage et Polymorphisme 1. L’héritage
L'héritage est un mécanisme qui facilite la réutilisation du code et la gestion de son évolution. Il permet d’implémenter le principe d’abstraction par la factorisation des propriétés et des opérations partagées par différents objets.
Une classe générale définit alors un ensemble d’attributs qui sont partagés par d’autres classes, dont on dira qu’elles héritent de cette classe générale.
Grâce à l'héritage, les objets d'une classe ont accès aux données et aux méthodes de la classe parent et peuvent les étendre. Les sous classes peuvent redéfinir les variables et les méthodes héritées. Pour les variables, il suffit de les re-déclarer sous le même nom avec un type différent. Les méthodes sont redéfinies avec le même nom, les mêmes types et le même nombre d'arguments, sinon il s'agit d'une surcharge. L'héritage successif de classes permet de définir une hiérarchie de classes qui se compose de super classes et de sous classes.
Remarques
Une classe peut avoir plusieurs sous classes.
Une classe ne peut avoir qu'une seule classe mère : il n'y a pas d'héritage multiple en java.
Object est la classe mère de toutes les classes en java . Toutes les variables et méthodes contenues dans Object sont accessibles à partir de n'importe quelle classe car par héritage successif toutes les classes héritent d'Object.
Syntaxe
Exemple
Publicité
31 Chiheb-Eddine Ben N’Cir
Programmation orientée objet
La classe Etudiant1et2 hérite les attributs et les méthodes de classe Etudiant . Un objet de type Etudiant1et2 possède, en plus des attributs note1 et note2, les attributs hérités de la classe Etudiant qui sont Nom, Prenom, Adresse et CIN. Sachant que ces attributs sont déclarés privés, on ne peut pas accéder directement à ces attributs même à partir d’une classe descendante. Il faut utiliser les getters et setters de ces attributs hérités. Seulement les attributs Note1 et Note2 sont accessibles (appel directe) dans la classe Etudiants1et2.
Remarque :
2. La Redéfinition
La redéfinition consiste à redéfinir, dans une classe descendante, une méthode implémentée dans la classe mère. Généralement, le code à redéfinir est une extension de la méthode définie dans la classe mère. C’est pour cela, qu’on commence par l’appel de la méthode définit dans la classe mère en utilisant le mot clef « Super.Nomdelamethode (param1, param2,…) ». Pour la redéfinition des constructeurs, on utilise directement « Super (param1, param2,…) ».
Exemple : Redéfinition de deux constructeurs et redéfinition de la méthode AfficherEtudiant()
32 Chiheb-Eddine Ben N’Cir
Programmation orientée objet
3. Le Polymorphisme
Le polymorphisme est un concept qui permet de manipuler des objets sans en connaître tout à fait le
type tout en se basant sur la relation d’héritage. Un objet peut être déclaré en utilisant un « type »
Publicité
générique et ensuite il sera créé à travers une classe descendante. .
Le polymorphisme en Java, se traduit par :
La compatibilité entre un type dérivée et un type ascendant.
La ligature dynamique des méthodes, dans le sens où il permet d’obtenir le comportement
adapté à chaque type d’objet, sans avoir besoin de tester sa nature de quelque façon que ce
soit.
Exemple 1 :
Nous donnons dans cet exemple une utilisation possible du concept du polymorphisme à travers la
déclaration d’un tableau d’étudiant( Tab ). Ensuite, l’appel de la fonction saisir () sera interprété
automatiquement par le compilateur qui fait la différence entre la saisie d’un etudiant1et2 et la saisie
d’un etudiant3 puisque l’instanciation de l’objet contenu dans l’élément i du tableau à été réalisée
Publicité
avec un type descendant (etudiant1et2 ou bien etudiant3). La même chose pour la fonction
afficherEtudiant() où l’affichage d’un etudiant1et2 est différent de l’affichage d’un étudiant3.
33 Chiheb-Eddine Ben N’Cir
Programmation orientée objet
Remarque :
Exemple 2
Supposant que la méthode AfficherMoyenne () est définie seulement dans les classes Etudiant3 et
Etudiant1et2 (Elle n’existe pas dans la classe Etudiant). Alors, on ne peut pas appliquer le principe du
polymorphisme. Mais on peut résoudre le problème comme suit :
34 Chiheb-Eddine Ben N’Cir
Programmation orientée objet
Exercice
Publicité
A partir de l’exemple décrit dans la section précédente, Comment peut-on savoir le nombre total des
Etudiants ? le nombre des Etudiants1et2 et le nombre des etudiant3 ?
Correction :
Méthode 1 : utilisation de l’operateur Instanceof
Méthode 2 : utilisation d’attributs statiques dans les classes Etudiant3 et Etudiant1et2
35 Chiheb-Eddine Ben N’Cir
Programmation orientée objet
36 Chiheb-Eddine Ben N’Cir