142 votes

Pourquoi déclarer une méthode d'une interface Java comme étant abstraite ?

J'ai utilisé la fonction de refactoring "pull interface" d'Eclipse aujourd'hui pour créer une interface basée sur une classe existante. La boîte de dialogue proposait de créer toutes les nouvelles méthodes de la nouvelle interface en tant que méthodes "abstraites".

Quel serait l'avantage de cela ?

Je pensais que le fait de pouvoir déclarer des méthodes d'interface comme abstraites était une caractéristique superflue et inoffensive du langage qui n'est pas particulièrement encouragée.

Pourquoi Eclipse supporterait-il un tel style, ou pourquoi quelqu'un choisirait-il volontairement de le faire ?

Clarification : Je ne demande pas pourquoi les méthodes d'interface sont abstraites, c'est évident. Je demande pourquoi on choisirait explicitement de les marquer comme abstraites puisque si elles sont dans une interface, elles sont de toute façon abstraites.

146voto

jdmichal Points 6283

Selon le Spécification du langage Java le abstract pour les interfaces est obsolète et ne devrait plus être utilisé. (Section 9.1.1.1)

Cela dit, compte tenu de la propension de Java à assurer la rétrocompatibilité, je doute vraiment qu'il y ait un jour une différence entre les deux versions de l'interface. abstract est présent.

39voto

VonC Points 414372

"Le bénéfice de cela" (ajouter abstract sur la déclaration des méthodes d'interface) dans eclipse serait un vieux problème de compatibilité avec compilateur eclipse jdt dans jdk1.3

Depuis la version 1.4, les bibliothèques jdk ne contiennent plus de méthodes abstraites par défaut (sur les classes abstraites implémentant des interfaces).
Cela trompe le diagnostic du compilateur Eclipse 1.3 puisque leur implémentation repose sur leur existence.
Notez que Javac 1.3 refuserait complètement de s'exécuter contre les bibliothèques 1.4 (en utilisant l'option -bootclasspath).

Étant donné que le compilateur Eclipse est susceptible d'être au niveau de conformité 1.4 (cf. Workbench>Preferences>Java>Compiler>JDK Compliance ), ou utiliser au moins les bibliothèques de classe 1.3 si vous utilisez le mode de conformité 1.3, la présence de "abstract" n'est pas requise dans la plupart des projets eclipse actuels.

38voto

Will Points 994

De la Java SE 7 JLS (Spécification du langage Java) : "Il est permis, mais déconseillé par souci de style, de spécifier de manière redondante le modificateur public et/ou abstrait pour une méthode déclarée dans une interface."

Pour Java SE 5.0 : "Pour des raisons de compatibilité avec les anciennes versions de la plate-forme Java, il est autorisé mais déconseillé, pour des raisons de style, de spécifier de manière redondante le modificateur abstrait pour les méthodes déclarées dans les interfaces."

9voto

dhiller Points 2046

Selon JLS, les méthodes dans les interfaces sont abstraites par défaut, donc le mot-clé est redondant. Sachant cela, je ne l'utiliserais jamais pour "éviter l'encombrement de la présentation".

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