UpCasting non respecté avec une méthode surchargée
Soit une classe A :
Code:
1 2 3 4 5 6 7 8
|
public class A {
public void afficher () {
System.out.println ("A");
}
} |
et une classe fille B qui surcharge la méthode afficher :
Code:
1 2 3 4 5 6 7
| public class B extends A {
// surcharge
public void afficher () {
System.out.println ("B");
}
} |
L'exécution du code suivant montre que le cast de B vers A (upcasting) est ignoré !?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class TestUpcasting {
public static void main(String[] args) {
A objetA = new A();
objetA.afficher ();
// => affiche 'A' (pas de surprise)
B objetB = new B();
objetB.afficher ();
// => affiche 'B' (pas de surprise là non plus)
((A) objetB).afficher ();
// => affiche 'B' au lieu de 'A' !?
}
} |
1/ Pourquoi la méthode B.afficher() est-elle appelée au lieu de la méthode A.afficher() ?
2/ Comment transformer un objet B en objet A ?
Remarque sur une doc Java
Page suivante :
http://fr.wikibooks.org/wiki/Program.../Polymorphisme
Seconde section : Polymorphisme d'héritage (par redéfinition de méthodes dans une sous-classe)
La dernière remarque me semble fausse au vu de ce que nous savons maintenant.
Code:
1 2 3 4 5
|
public static void main(String[] args) {
B ob1= new B(10,20);
((A)ob1).getter(); // Par type casting, appel de methode getter de la classe A
} |
La méthode qui va s'exécuter sera en fait B.getter !