Accueil
 Sommaire du cours
 1  Introduction à Java
 2  Concepts de bases de Java
 3  Classes et objets en Java
 4  Généralisation spécialisation en Java
 4.1  Généralisation spécialisation
 4.2  Polymorphisme
 4.2.1  Exemple de Upcast et Downcast
 4.3  Redéfinition de méthodes dans les classes dérivées
 4.4  Héritage, membres et visibilité
 Questions
 4.5  Classes abstraites
 4.6  Exemple de classe Abstraites
 4.7  Interfaces
 5  Organisation des sources Java
 6  API Java
 7  Exceptions en Java
 8  Concepts objets avancés en Java
 Bibliographie

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


4.2 Polymorphisme

  • Affectation de références dans un arbre d’héritage
  • Upcast : une référence d’une classe B peut référencer toute instance de la classe B ou de ses classes dérivées
  • Downcast : une référence d’une classe D dérivée d’une classe B peut recevoir une référence de la classe B si et seulement si :
    • L’objet référencé est bien du type D ou d’un de ses types dérivés
    • Le changement de type doit être explicite (en anglais, cast) vers le nouveau type (D)

    précédent     suivant 


Le polymorphisme revêt plusieurs aspects en matière de programmation. Nous prendrons la définition de [Armstrong, 2006] : « Different classes may respond to the same message and each implement it appropriately ». L’opérateur + permet une approche simple de cette propriété. En effet, le même opérateur peut être utilisé avec des types différents (entier ou en virgule flottante). La réalisation de 1 + 2 n’est pas la même que celle de 1.0 + 2. Le symbole plus dénote l’addition mais ne s’adresse pas au même type de données.

La possibilité de généraliser ou spécialiser des classes donne une relation qui se traduit par un arbre d’héritage. Le sommet de cet arbre correspond à la classe la plus générale et les feuilles représentent les classes les plus spécialisées.

La possibilité de mettre la référence d’un objet d’une classe dérivée une référence de la classe parente est un aspect objet du polymorphisme. Cette opération est appelée Upcast car l’arbre d’héritage est parcouru du bas vers le haut.

Réciproquement, lorsqu’une référence d’un objet d’une classe dérivée a été mise dans une variable pouvant recevoir une référence sur un objet de la classe de base, nous pouvons mettre cette référence dans une variable qui peut contenir une référence sur un objet de la classe dérivée. Cette opération est appelée Downcast car l’arbre d’héritage est parcouru du haut vers le bas. Christian Bac, Denis Conan, Télécom SudParis, CSC 4002, Octobre 2015