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.3  Redéfinition de méthodes dans les classes dérivées
 4.3.1  Polymorphisme et liaison dynamique avec \texttt toString
 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.3.1 Polymorphisme et liaison dynamique avec toString
 
1import personnes.Personne; 
import personnes.Enseignant; 
public class TestPolyMorph { 
    public static void main(final String[] args) { 
5        Personne p = new Personne("Dupont","Julien", 
                "1831291..."); 
        Enseignant e = new Enseignant("Durand","Emilie", 
                "2780633...",3,"CloudComputing"); 
9        System.out.println(p.toString()); 
        System.out.println(e.toString()); 
        p = e;      // UpCast 
        System.out.println(p.toString()); 
13    } 
}

 
verbatim

    précédent     suivant 


Cet exemple montre plusieurs aspects du polymorphisme et de la liaison dynamique :

  1. à la ligne 11 : bien que définie dans la classe Personne, la méthode toString de la classe Enseignant est utilisée lorsqu’on utilise une référence de la classe Enseignant. Cet aspect est appelé liaison tardive. Java utilise la méthode qui correspond à la classe de l’objet. En fait elle utilise la méthode qui est définie dans l’arbre d’héritage le plus près de la classe réelle de l’objet ;
  2. à la ligne 12 : une référence de la classe dérivée peut être affectée à une variable correspondant à la classe de base ;
  3. à la ligne 13 : la liaison dynamique fait que l’appel de toString() fait appel à la méthode contenue dans la classe dérivée, alors que l’appel est réalisé à travers une référence de la classe parente.

Christian Bac, Denis Conan, Télécom SudParis, CSC 4002, Octobre 2015