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");
    }
 
}
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");
    }
 
 
}
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
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) 
 
    }	
  }
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?

Merci pour votre aide.