Une interface peut-elle étendre plusieurs interfaces en Java? Ce code semble 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é en Java. Pourquoi semble-t-il exister une exception pour les interfaces?
Oui tu peux le faire. Une interface peut étendre plusieurs interfaces, comme illustré ici:
interface Maininterface extends inter1, inter2, inter3 {
// methods
}
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:
interface A {
void test();
}
interface B {
void test();
}
class C implements A, B {
@Override
public void test() {
}
}
Ensuite, une seule implémentation fonctionne pour les deux :).
Lire mon post complet ici:
http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html
Un interface peut étendre plusieurs interfaces.
Un classe peut implémenter plusieurs interfaces.
Cependant, une classe ne peut que étendre une seule classe.
Faites attention à la manière dont vous utilisez les mots extends
et implements
lorsque vous parlez de interface
et class
.
Une interface peut-elle étendre plusieurs interfaces en Java?
La réponse est: Oui.
Selon JLS
Une interface peut être déclarée comme une extension directe d'une ou de plusieurs autres interfaces, ce qui signifie qu'elle spécifie implicitement tous les types de membre, les méthodes abstraites et les constantes des interfaces qu'elle étend, à l'exception des types de membre et des constantes qu'elle peut masquer.
Vous pouvez étendre plusieurs Interfaces
mais vous ne pouvez pas étendre plusieurs classes
.
La raison pour laquelle il n'est pas possible dans Java d'étendre plusieurs classes, est la mauvaise expérience de C++ où c'est possible.
L'alternative pour l'héritage multipe est qu'une classe peut implémenter plusieurs interfaces (ou qu'une interface peut étendre plusieurs interfaces)
Une classe Java ne peut étendre qu'une classe parente. L'héritage multiple n'est pas autorisé. Les interfaces ne sont toutefois pas des classes et une interface peut s'étendre sur plusieurs interfaces parentes.
par exemple, regardez ici: http://www.tutorialspoint.com/Java/java_interfaces.htm
À partir de la page de documentation Oracle sur le type d'héritage multiple, nous pouvons trouver la réponse exacte ici . Ici, nous devrions 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 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.
La question se pose alors pour "problème de diamant" et comment Java s'en occupe: -
En cas d'héritage multiple de l'implémentation, le compilateur Java génère une erreur de compilation et demande à l'utilisateur de la corriger en spécifiant le nom de l'interface. Exemple ici: -
interface A {
void method();
}
interface B extends A {
@Override
default void method() {
System.out.println("B");
}
}
interface C extends A {
@Override
default void method() {
System.out.println("C");
}
}
interface D extends B, C {
}
Nous allons donc avoir l'erreur suivante: - l'interface D hérite de valeurs par défaut non liées pour method () des types B et C l'interface D étend B, C
Vous pouvez le réparer comme: -
interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
En conclusion, nous pouvons dire que Java ne supporte pas l'héritage multiple d'état mais il supporte l'héritage multiple d'implémentation et l'héritage multiple de type .
Je pense que votre confusion réside dans l’héritage multiple, dans lequel c’est une mauvaise pratique de le faire et dans Java, cela n’est pas non plus possible. Cependant, l'implémentation de plusieurs interfaces est autorisée dans Java et est également sûre.