Pourquoi les variables d'interface sont-elles statiques et finales par défaut en Java ?
Notez que les classes abstraites ne peuvent pas non plus être instanciées "en tant que telles" et qu'elles peuvent avoir des variables d'instance.
Pourquoi les variables d'interface sont-elles statiques et finales par défaut en Java ?
Extrait de la FAQ sur la conception d'interfaces Java de Philip Shaw :
Les variables d'interface sont statiques car les interfaces Java ne peuvent pas être instanciées en tant que telles ; la valeur de la variable doit être attribuée dans un contexte statique dans lequel aucune instance n'existe. Le modificateur final garantit que la valeur affectée à la variable d'interface est une véritable constante qui ne peut pas être réaffectée par le code du programme.
Notez que les classes abstraites ne peuvent pas non plus être instanciées "en tant que telles" et qu'elles peuvent avoir des variables d'instance.
Si nous essayons de changer la valeur de la variable dans la classe d'implémentation, nous rencontrons l'erreur suivante. Exception dans le thread "main" java.lang.Error : Problème de compilation non résolu : le champ final Interface1.name ne peut pas être attribué.
Cette explication de la static
est complètement faux. Les variables d'instance publiques d'une classe font partie de son interface et il n'y a aucune raison pour qu'elles ne soient pas abstraites dans un langage Java interface
tout comme les méthodes d'instance. Il importe peu qu'une méthode Java interface
ne peuvent pas être instanciées directement - vous pouvez toujours avoir des instances de classes qui mettent en œuvre la méthode de l'utilisateur. interface
et il est judicieux d'exiger qu'ils possèdent une certaine variable d'instance publique. Quant à la partie concernant final
qui n'offre pas d'explication du tout - il décrit juste ce que final
signifie.
Puisque l'interface n'a pas d'objet direct, la seule façon d'y accéder est d'utiliser une classe/interface et c'est pourquoi si une variable d'interface existe, elle doit être statique sinon elle ne sera pas du tout accessible au monde extérieur. Puisqu'elle est statique, elle ne peut contenir qu'une seule valeur et toute classe qui l'implémente peut la changer, ce qui entraîne un désordre total.
Ainsi, si une variable d'interface existe, elle sera implicitement statique, finale et évidemment publique ! !!
Bien sûr, une variable d'instance serait accessible si elle était autorisée dans un fichier Java. interface
. Une classe implémente l'interface, en déclarant la variable d'instance (comme l'exige l'interface). Son constructeur (ou une autre méthode) définit la variable d'instance. Lorsqu'une instance de la classe est instanciée, vous pourrez accéder à sa variable d'instance.
Tout le monde dit pourquoi ils sont statiques, c'est bien, mais pourquoi la finale... tous disent qu'il faut faire une vraie constante. Mais pourquoi ? Je pense que dans le cas où notre interface est étendue par deux nouvelles interfaces et que ces deux interfaces sont implémentées par une classe et si notre variable n'est pas une vraie constante alors nous aurons le vieux problème typique du diamant.
Pour indiquer que c'est une constante. Java n'a pas de mot clé const. static final est la façon dont vous déclarez les constantes.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
47 votes
Vous ne devez pas mettre de variables dans les interfaces.
35 votes
Parce que les interfaces définissent des contrats qui peuvent être mis en œuvre de différentes manières. La valeur d'une variable est l'implémentation.
12 votes
Nous pouvons certainement le faire lorsque nous savons que toutes les classes implémentant l'interface ont des variables constantes (noms de champs par exemple).
0 votes
Est-ce une bonne idée de faire d'une variable dans une classe une instance de l'interface que la classe implémente ? J'ai déjà entendu cela.
0 votes
Les interfaces en java suivent le principe ACID, final à cause de la normalisation en C. @cherouvim Le type d'une variable est l'implémentation, une variable doit être déclarée, avec ou sans valeur et la définition d'une variable est la valeur. Si vous changez la valeur d'une variable n'est pas une réimplémentation, c'est une redéfinition.
0 votes
Jetez un coup d'œil sur le résumé Livre de règles de Java
2 votes
La réponse de Arun Raaj (répondu le 24 avr. 18 à 12:30) et le commentaire de denis (17 août 17 à 21:02) identifient correctement l'héritage multiple comme le problème principal...