Une interface peut-elle étendre plusieurs interfaces en Java? Ce code apparaît valide dans mon IDE et il compile:
interface Foo extends Runnable, Set, Comparator<String> { }
mais j'avais entendu dire que l'héritage multiple n'était pas autorisé à Java. Pourquoi semble-t-il y avoir une exception pour les interfaces?
Réponses:
Oui tu peux le faire. Une interface peut étendre plusieurs interfaces, comme indiqué ici:
Une seule classe peut également implémenter plusieurs interfaces. Et si deux interfaces ont une méthode définissant le même nom et la même signature?
Il y a un point délicat:
Ensuite, une seule implémentation fonctionne pour les deux :).
Lisez mon article complet ici:
http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html
la source
void test()
et l'interface B avecboolean test()
? (Est-ce un cousin du problème du diamant ?) __Essayé et la chose sensée se produit: non autorisé si le type de retour est différent.Une interface peut étendre plusieurs interfaces .
Une classe peut implémenter plusieurs interfaces .
Cependant, une classe ne peut étendre qu'une seule classe .
Faites attention à la manière dont vous utilisez les mots
extends
etimplements
lorsque vous parlez deinterface
etclass
.la source
La réponse est: Oui.
Selon JLS
la source
À partir de la page de documentation Oracle sur les types d'héritage multiple, nous pouvons trouver la réponse exacte ici . Ici, nous devons d'abord connaître le type d'héritage multiple en java: -
Java "ne prend pas en charge l'héritage multiple d'état, mais il prend en charge l'héritage multiple d'implémentation avec les méthodes par défaut depuis la version java 8 et l'héritage multiple de type avec les interfaces.
Ensuite, la question se pose pour le "problème de diamant" et comment Java gère cela: -
En cas d'héritage multiple de l'implémentation, le compilateur java donne une erreur de compilation et demande à l'utilisateur de la corriger en spécifiant le nom de l'interface. Exemple ici: -
Donc, ici, nous obtiendrons l'erreur comme: - l'interface D hérite des valeurs par défaut non liées pour la méthode () des types B et C l'interface D étend B, C
Vous pouvez le réparer comme: -
En conclusion, nous pouvons dire que java ne prend pas en charge l' héritage multiple d'état, mais qu'il prend en charge l' héritage multiple d'implémentation et l'héritage multiple de type .
la source
Vous pouvez étendre plusieurs
Interfaces
mais vous ne pouvez pas étendre plusieursclasses
.La raison pour laquelle il n'est pas possible en Java d'étendre plusieurs classes est la mauvaise expérience de C ++ où cela est possible.
L'alternative pour l'héritage multipipe est qu'une classe peut implémenter plusieurs interfaces (ou une interface peut étendre plusieurs interfaces)
la source
Je pense que votre confusion réside dans l'héritage multiple, dans lequel c'est une mauvaise pratique de le faire et en Java, ce n'est pas non plus possible. Cependant, l'implémentation de plusieurs interfaces est autorisée en Java et est également sûre.
la source
par exemple, jetez un œil ici: http://www.tutorialspoint.com/java/java_interfaces.htm
la source