web-dev-qa-db-fra.com

Pourquoi déclarer une interface comme abstraite?

Quel est l'intérêt de déclarer une interface abstraite? Même chose pour une méthode d'interface. Y a-t-il un but?

par exemple.

public abstract interface Presenter {
 public abstract void go(final HasWidgets container);
}
49
Sudhir Jonathan

Où avez-vous trouvé le morceau de code que vous avez posté, une ancienne base de code Java?
C'est ce que le JLS a à dire: 

9.1.1.1 interfaces abstraites:
Chaque interface est implicitement abstraite. Ce modificateur est obsolète et ne devrait pas être utilisé dans les nouveaux programmes.

9.4 Déclarations de méthodes abstraites:
Pour des raisons de compatibilité avec les anciennes versions de la plate-forme Java, il est permis mais il est déconseillé, en raison du style, de spécifier de manière redondante le modificateur abstrait

66
sateesh

Les interfaces et les méthodes d'interface sont implicitement abstract même si elles ne sont pas déclarées comme telles. Il n'est donc pas nécessaire de le spécifier explicitement.

27
notnoop

Cela ne fait aucune différence - les interfaces et les méthodes d'interface sont toujours abstraites mais vous n'avez pas besoin d'ajouter le modificateur (et les méthodes d'interface sont toujours publiques, vous n'avez donc pas besoin du modificateur public).

De la JLS :

9.1.1.1 Interfaces abstraites 

Chaque interface est implicitement abstraite. Ce Le modificateur est obsolète et ne devrait pas l'être utilisé dans les nouveaux programmes.

4
Andreas_D

En règle générale, vous ne déclarez pas l'interface, ni ses méthodes, comme abstraite. Ils sont implicitement.

Les méthodes sont également publiques, vous pouvez donc les ignorer également. :-)

2
KLE

regardez ce post

https://stackoverflow.com/questions/4380796/what-is-public-abstract-interface-in-Java/4381308#4381308

l'interface est la classe abstraite% 100.

le mot clé abstract est redondant ici

1
user467871

"Pourquoi déclarer une interface abstraite?" - J'ai la même question et je pense que la notion abstraite est redondante. Mais j'ai dû repenser lorsque j'ai vu l'interface Map en Java 1.8.Peut être cela doit être changé en Java 

//  (version 1.8 : 52.0, no super bit)
// Signature: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/Object;
public abstract interface Java.util.Map {

  // Method descriptor #1 ()I
  public abstract int size();
}
1
Vasishta Kuricheti

Le modificateur abstrait d'une méthode d'interface est toujours redondant, de même que le modificateur public.

Le modificateur abstrait sur l'interface elle-même peut être redondant pour une raison technique stricte, car une interface ne peut jamais être instanciée à l'aide du nouvel opérateur et l'interface sera toujours abstraite si elle est demandée par réflexion.

Cependant, il peut exister une raison sémantique pour déclarer un résumé d'interface (pris en charge par divers outils UML): mettre en œuvre l'interface directement mais uniquement via une sous-interface . Ainsi, par exemple vous pouvez considérer le nœud d'interface comme sémantiquement abstrait, tandis que les sous-interfaces Dossier et Fichier qui étendent le nœud sont sémantiquement non abstraites. Vous ne disposerez jamais d'une instance qui ne soit qu'un nœud - ce sera un dossier ou un fichier.

Encore plus loin, il existe des frameworks qui permettent une "instanciation" d'interfaces (techniquement via des proxies dynamiques). Certaines interfaces (par exemple, une interface de base prédéfinie) ne sont pas autorisées à fournir comme argument. À des fins de documentation, il peut être judicieux dans le code source d’utiliser le modificateur abstrait pour exprimer ces informations.

0
Jörg

Le comportement par défaut d'une interface est essentiellement équivalent à ce que vous avez dans votre exemple. Le définir comme abstrait est simplement redondant.

0
Zack Marrapese

Il est inutile de déclarer l’interface abstraite. Comme les méthodes de l'interface ne sont que des méthodes abstraites ... Une dernière chose, une classe abstraite peut avoir des méthodes à la fois concrètes et abstraites, mais l'interface ne doit contenir que des méthodes abstraites.

0
giri

Je pense simplement que les commentaires, l'explicitation et la cohérence avec la syntaxe et la sémantique de la classe ...

Ce n'est pas nécessaire, mais cela pourrait aider si un lecteur de votre code est distrait ou peu au courant de Java.

0
fortran