Est-ce que «final statique public» est redondant pour une constante dans une interface Java?

Ce code:

interface Config { int MAX_CONN = 20; } 

compilé et travaillé comme prévu. Il semble que ce soit la même chose que:

 interface Config { public static final int MAX_CONN = 20; } 

Est-ce que “public static final” est redondant pour une constante dans une interface Java? Est-ce vrai pour Java 1.1, 1.2, 1.3, 1.4, …, 1.8 ou a-t-il changé dans une version de Java?

Les variables déclarées dans l’interface sont implicitement public static final . Voici ce que dit JLS 9.3 :

Chaque déclaration de champ dans le corps d’une interface est implicitement publique, statique et finale . Il est permis de spécifier de manière redondante tout ou partie de ces modificateurs pour ces champs.

Lisez le JLS pour avoir une idée de ce qui a été fait.

Regardez cette réponse SO :

Les variables d’interface sont statiques car les interfaces Java ne peuvent pas être instanciées à part entière. la valeur de la variable doit être affectée dans un contexte statique dans lequel aucune instance n’existe. Le dernier modificateur garantit que la valeur atsortingbuée à la variable d’interface est une constante vraie qui ne peut pas être réaffectée par le code du programme.

Les variables interface sont implicitement static et final car les interfaces Java ne peuvent pas être instanciées toutes seules.

Les interfaces sont déclarées à l’aide du mot-clé interface, et ne peuvent contenir que des déclarations de signatures et de constantes de méthode ( déclarations de variables déclarées statiques et finales ). Une interface peut ne jamais contenir de définitions de méthode.

http://en.wikipedia.org/wiki/Interface_(Java)

Les variables d’interface sont statiques car les interfaces Java ne peuvent pas être instanciées à part entière. La valeur de la variable doit être atsortingbuée dans un contexte statique – aucune instance n’existe. Le dernier modificateur garantit que la valeur atsortingbuée à la variable d’interface est une constante vraie qui ne peut pas être réaffectée par le code du programme.

Les variables d’interface sont toujours statiques et finales.