Bonjour,

je suis tombé sur cet exercice sur internet:

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
19
20
21
22
23
24
class A{
  void m(A a){
    System.out.println("m de A");
  }
  void n(A a){
    System.out.println("n de A");
  }
}
 
 
class B extends A{
  void m(A a){
    System.out.println("m de B");
  }
  void n(B b){
    System.out.println("n de B");
  }
  public static void main(String[] argv){
    A a = new B();
    B b = new B();
    a.m(b);
    a.n(b);
  }
}
Le main affiche
m de B
n de A
mais je ne voie pas pq...D'après moi:
a et b référencent des objets de type B.
on appelle l'opération m(B) de la classe B qui n'existe pas pour un objet B en paramètre, mais un objet B est aussi un objet A, donc on appelle m(A) de la classe A qui affiche m de A
La 2ème ligne me choque encore plus:
on appelle a.n(b); avec a et b des références sur des objets de la classe B, donc on appelle n(B) de la classe B qui devrait normalement afficher:
n de b
???
Merci.