Bonjour j'ai consulté le polymorphisme dans le livre Programmer en Java(édition 5) dont la partie "Limites de l’héritage et du polymorphisme" dit:
tous ça c'était une explication d'une redéfinition d'une méthodes se trouve dans la classe mère ce qui est normale pour moi ,mais le résultat qui m'étonne dont voici l’explication :la classe Point dispose d’une méthode identique fournissant la valeur true lorsque le point
fourni en argument a les mêmes coordonnées que le point courant :
Point p1, p2 ;
.....
p1.identique(p2) // true si p1 et p2 ont mêmes coordonnées
• la classe Pointcol, dérivée de Point, redéfinit cette méthode pour prendre en compte non
seulement l’égalité des coordonnées, mais aussi celle de la couleur :
Pointcol pc1, pc2 ;
.....
pc1.identique(pc2) // true si pc1 et pc2 ont mêmes coordonnées et même couleur
Considérons alors :
Point p1 = new Pointcol (1, 2, (byte)5) ;
Point p2 = new Pointcol (1, 2, (byte)8) ;
je lie et je relie cette explication pas mal de fois et je comprends que lors de la compilation le choix de la méthode voulue s'est fais par rapport au type de la référence qui est de la classe mère (Point) mais lors de l’exécution la ligature dynamique n'arrive pas à choisir la méthode exacte par ce qu'elles n'ont pas la même signatureL’expression p1.identique(p2) a pour valeur true alors que nos deux points colorés n’ont pas
la même couleur. L’explication réside tout simplement dans la bonne application des règles
relatives au polymorphisme. En effet, lors de la compilation de cette expression p1.identique(
p2), on s’est fondé sur le type de p1 pour en déduire que l’en-tête de la méthode identique
à appeler était de la forme Point identique (Point). Lors de l’exécution, la ligature
dynamique tient compte du type de l’objet réellement référencé par p1 (ici Pointcol) pour
définir la classe à partir de laquelle se fera la recherche de la méthode voulue. Mais comme
dans Pointcol, la méthode identique n’a pas la signature voulue, on poursuit la recherche dans
les classes ascendantes et, finalement, on utilise la méthode identifie de Point. D’où le résultat
constaté.
est ce que quelqu'un peut m'orienter vers la bonne compréhension (où améliorer la mienne )de cet exemple? merci d'avance pour votre attention .
Partager