Bonjour,

Je vais bientôt passer un examen sur papier en Java, et le prof aime bien nous coller des cas tordus et nous demander, pour chaque ligne, si ça compile, et si oui qu'est ce qui se passe et pourquoi. Voici un exemple de code qui me pose problème :

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
 
interface I1 {
   int m1();
}
interface I2 extends I1 {
   int m2();
}
class B implements I1 {
   int i = 7;
   public int m1() { return i; }
}
class C extends B implements I2 {
   int i = -7;
   public int m1() { return i; }
   public int m2() { return i; }
}
public class Test {
   public static void main(String[] args) {
      B x = new C();
      System.out.println(x.i); // Affiche 7
      System.out.println(x.m1()); // Affiche -7
      // System.out.println(x.m2()); // Ne compile pas
   }
}
J'y ai ajouté mes commentaires pour dire ce qu'il se passe à l'exécution. Sauriez vous m'expliquer ce qu'il se passe lors de l'éxécution dans la machine virtuelle ? Quelles méthodes sont appelées, celles de B ou de C (visiblement celles de B vu que x.m2() ne compile pas). Ou et comment les valeurs 7 ou -7 sont elles piochées.

Si quelqu'un pouvait m'aider à comprendre ceci, ça m'aiderait beaucoup.