Soit une classe A :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?