En Java, quand dois-je utiliser une méthode abstraite dans une interface?
-
18-09-2019 - |
Question
Je l'interface suivante en Java
public interface IFoo
{
public abstract void foo();
public void bar();
}
Quelle est la différence entre foo () et bar ()? Quand dois-je utiliser abstraite?
Les deux semblent accomplir ce que je veux, à moins que je manque quelque chose de subtil?
Mise à jour en double de Pourquoi voudrait-on déclarer une méthode d'interface Java abstraite?
La solution
Il n'y a aucune différence fonctionnelle. Aucune mise en œuvre est toujours fourni dans une interface java si toutes les déclarations de méthode sont implicitement abstraite.
Voir [1]: http: //java.sun .com / docs / livres / tutorial / java / Iandi / abstract.html
Une citation directe forme ci-dessus:
Note: Toutes les méthodes dans une interface (voir la section Interfaces) sont implicitement abstrait, de sorte que le modificateur abstrait n'est pas utilisé avec des méthodes d'interface (il pourrait être-il est tout simplement pas nécessaire)
.
Autres conseils
méthodes d'interface sont à la fois public
et abstract
par défaut. Il n'y a pas de différence entre foo()
et bar()
et vous pouvez supprimer en toute sécurité tous les mots-clés public
et abstract
.
Vous n'êtes pas quelque chose qui manque. De Java Language Specification :
Chaque déclaration de méthode dans le corps d'une interface est implicitement abstraite, de sorte que son corps est toujours représenté par un point-virgule, pas un bloc.
Chaque déclaration de méthode dans le corps d'une interface est implicitement public.
En d'autres termes, vous pouvez omettre le public
ainsi que la abstract
sur les méthodes d'interface.
Il est redondant (il n'y a pas de différence entre les deux déclarations) et fortement déconseillée dans les section 9.4 de la spécification du langage Java:
Pour la compatibilité avec les anciennes versions de la plate-forme Java, il est permis mais découragé, comme une question de style, de préciser l'abstrait de manière redondante modification pour des méthodes déclarées dans interfaces.
Et public
est tout aussi inutile et découragé:
Il est permis, mais fortement déconseillé en matière de style, de préciser la manière redondante modificateur public méthodes d'interface.
Je ne sais pas pourquoi public
est fortement découragée mais abstract
est tout simplement découragée ...
Les deux faire la même, puisque toutes les méthodes d'une interface sont abstraites.
abstract
dans ce scénario est inutile (ce qui est des procédés de marquage en tant interfaces public
).
Vous au lieu utiliser sur une méthode dans une classe abstraite afin de faire respecter son primordial par une sous-classe.
Il ne sont différence entre les déclarations. Conceptuellement, toutes les méthodes dans une interface sont abstraites.
Il ne fait aucune différence. Toutes les méthodes dans une interface Java sont toujours abstraites.
Voir la première note à ce lien: http://java.sun.com/docs/books/ tutorial / java / Iandi / abstract.html
foo () et bar () sont abstraites comme ils sont déclarés dans une interface. Le mot abstrait que vous avez utilisé ici est sans importance -. Vous feriez mieux de le supprimer
Interfaces en java sont égaux « en quelque sorte » à un cours entièrement abstraites, afin d'ajouter le mot-clé « abstrait » à une déclaration de méthode dans une interface n'a rien à voir avec la méthode!