Je prépare gentiment la certif 1z0-805 (mise à jour vers java 7 programer)
Et là je tombe sur une question dans un bouquin qui me semble sujette à controverse :
les choix sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class base1 { protected int var; } interface base2 { int var=0; //#1 } class Test extends base1 implements base2{ //#2 public static void main(String[] args) { System.out.println(var); //#3 } }
a) erreur à #1
b) erreur à #2
c) erreur à #3
d) pas d'erreur
J'ai répondu d. C'est la réponse qui me semblait la plus logique :
En effet, vu qu'on est dans un contexte static dans le main, "var" ne peut vouloir dire QUE la constante définie dans l'interface.
Et pourtant la bonne réponse est c.
Je ne comprends pas pourquoi le compilateur se plaint dans ce cas, puisque dans le code tel qu'il est écrit, "var" ne peut pas faire référence à l'attribut de "base1" puisqu'on n'a pas d'instance de cet objet.
Quelqu'un a une explication rationnelle à ceci ? J'imagine bien que cette erreur de compilation n'est pas là sans raison et a été réfléchie, mais je ne comprends vraiment pas la logique...
Partager