web-dev-qa-db-fra.com

Toutes les méthodes d’interface sont-elles abstraites?

Je vois son écrit dans la plupart des endroits-

"All of the methods in an interface are abstract."

Mais une interface peut également contenir default methods et static methods et des corps de méthodes existent pour les méthodes par défaut et les méthodes statiques.

alors toutes les méthodes d'interface sont-elles abstraites?

9
Android Developer

A partir de Java 8, une interface peut également contenir des méthodes par défaut et des méthodes statiques ainsi que des méthodes abstraites. Des corps de méthodes existent pour les méthodes par défaut et statiques.

L'une des modifications les plus importantes apportées à la conception de Java 8 concerne le concept d'interfaces . Avant Java 7, nous ne pouvions avoir que des déclarations de méthode dans Les interfaces. Mais à partir de Java 8, nous pouvons avoir des méthodes par défaut et Méthodes statiques dans les interfaces.

Méthode d'interface par défaut

Pour créer une méthode par défaut dans l'interface, nous devons utiliser le mot-clé «Default» avec la signature de la méthode.

Méthodes d'interface statique

Les méthodes statiques sont similaires aux méthodes par défaut, sauf que nous ne pouvons pas les remplacer par Dans les classes d'implémentation. Cette fonctionnalité nous aide à éviter les résultats indésirables en cas de mauvaise mise en œuvre dans les classes enfants.

Pour plus de check out this

8
Android Developer

c'est correct

Toutes ses méthodes sont abstraites, indépendamment de ses modificateurs d'accès.

Une explication parfaite par @coder :

Une interface est comme une classe "purement" abstraite. La classe etallde ses méthodes sont abstraites. Une classe abstraite peut avoir implémenté des méthodes Mais la classe elle-même ne peut pas être instanciée (utile pour L'héritage et après DRY).

Pour une interface, puisqu'il n'y a pas du tout d'implémentation, elles sont Utiles pour leur fonction: un contrat. Si vous implémentez l'interface , Vous devez alors implémenter les méthodes dans l'interface.

La différence est donc qu'une classe abstraite peut avoir implémenté des méthodes Alors qu'une interface ne le peut pas.

Ils sont séparés parce qu’une classe peut implémenter plusieurs interfaces . Java et C # restreignent une classe à une seule classe Inhérente. Certaines langues vous permettent d'hériter de plusieurs classes Et vous pouvez accomplir le travail d'une interface via une classe "Purement" abstraite. Mais l'héritage multiple a ses problèmes, À savoir le redoutable problème de diamant

Consultez la documentation d'Oracles sur Méthodes et classes abstraites.

7
TejjD

Toutes les méthodes des interfaces Java sont abstraites. Si elles sont explicitement déclarées statiques, elles ne sont pas abstraites.

1
resla95

Toutes les méthodes d'une interface sont abstraites. Cette instruction est vraie. Il est obligatoire pour une interface de disposer de méthodes abstraites uniquement pour appliquer l'héritage multiple.

0
Krishnan Mishra

Ceci est faux selon l'ouvrage de Jeanne Boyarsky & Scott Selikoff, OCA: Guide d'étude du programmeur I pour Java SE 8, programme associé certifié Oracle®, examen 1Z0-808.

. . . car avant Java 8, toutes les méthodes d'interface étaient supposées abstraites. Puisque Java 8 inclut maintenant les méthodes par défaut et statiques Et qu'elles ne sont jamais abstraites, vous ne pouvez pas supposer que le modificateur abstrait sera implicitement appliqué à toutes les méthodes par le compilateur. (page 346 du livre)

0
user5497372