Bonjour,
Je ne comprends pas pourquoi la méthode h de A est choisie plutôt que celle de C.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class A { public A(){ } public void h(A a, A aa){ System.out.println("h3 de A"); } }Voici la classe avec le main:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class C extends A{ public C() { } public void h(A a, B b){ System.out.println("h de C"); } }
A l'éxécution, il m'affiche "h3 de A". Je m'attendais à "h de c". En effet, bien que la reference soit de type A, le type réel est C. Comme h est redéfinie dans C, ne devrait-il pas appeler h de C?
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 public class Test { public Test() { } public static void main(String[]args){ A a = new A(); B b = new B(); C c = new C(); A x =new C();//transtypage /*la référence est de type A mais le type réel est C*/ x.h(a,b);//appel de ma méthode h de A (ce que je ne comprend pas) } }
Merci pour votre aide.
Partager