Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Sessions intra-entreprises sur demande : contact[at]mokatech.net.
Inscrivez-vous vite !

Java Quiz #26

Pour changer un peu, ce quiz a été rédigé comme une question de la certification SCJP (type de question, formatage du code, etc), afin de vous montrer à quoi cela ressemble. Saurez-vous y répondre ?

Considérant le code suivant, lesquelles de ces propositions sont justes ?

  1. interface Interface1 {
  2. String FOO = "foo1";
  3. }
  4.  
  5. interface Interface2 {
  6. String FOO = "foo2";
  7. }
  8.  
  9. public class InterfaceMultipleInheritance implements Interface1, Interface2 {
  10. public static void main(String[] args) {
  11. System.out.println(FOO);
  12. }
  13. }
  1. Le code ne compile pas
  2. Le code compile mais provoque une erreur au runtime
  3. Le code compile et affiche "foo2"
  4. Le code compile et fonctionne si on commente la ligne 11
  5. Le code compile et fonctionne si la valeur assignée aux deux constantes FOO est la même
  6. Autre

Réponse :
Les réponses 1 et 4 sont les bonnes.

En l'état, le compilateur indique que "The field FOO is ambiguous" à la ligne 11. Il nous signale par là qu'il ne sait pas s'il faut utiliser Interface1.FOO ou Interface2.FOO.
Ce qui est surprenant, c'est qu'il ne réagit pas à la ligne 9 en constatant qu'on implémente deux interfaces possédant la même constante : seule l'utilisation de la constante provoque une erreur, d'où la validité de la réponse 4.

Ceci nous amène à évoquer une bonne pratique : ne créez pas d'interfaces contenant uniquement des constantes, car les interfaces peuvent être implémentées de multiples fois et générer des ambigüités comme dans notre exemple. Préférez des classes final, qui centralisent l'accès à ces constantes.


Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.