307 votes

Pourquoi les variables d'interface sont-elles statiques et finales par défaut ?

Pourquoi les variables d'interface sont-elles statiques et finales par défaut en Java ?

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).

289voto

cherouvim Points 18550

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.

fuente

51 votes

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.

0 votes

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é.

23 votes

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.

45voto

dganesh2002 Points 527

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 ! !!

1 votes

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.

0 votes

Java permet aux méthodes statiques avec corps d'exister dans une interface. Celles-ci peuvent accéder aux variables statiques. Elles ne peuvent simplement pas les modifier, ce qui signifie que les fonctions statiques ne peuvent pas stocker de données

14voto

Abhishek Singh Points 111

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.

10voto

Amir Afghani Points 17519

Parce que tout le reste fait partie de l'implémentation, et les interfaces ne peuvent pas contenir d'implémentation.

1 votes

Alors quelle est la raison de la finale.

9 votes

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.

6 votes

Depuis Java 8, ils peuvent contenir une implémentation, mais il est fortement recommandé de ne pas l'utiliser si vous n'avez pas besoin de la compatibilité avec les backwarts :)

6voto

RubyDubee Points 1425

Static - parce que l'interface ne peut pas avoir d'instance. et final - parce que nous n'avons pas besoin de la modifier.

21 votes

"nous n'avons pas besoin" == "nous ne sommes pas autorisés", ne mélangez pas les significations.

Prograide.com

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.

Powered by:

X