168 votes

Est-ce qu'une interface peut étendre plusieurs interfaces en Java?

Est-ce qu'une interface peut étendre plusieurs interfaces en Java ? Ce code semble valide dans mon IDE et il compile :

interface Foo extends Runnable, Set, Comparator { }

mais j'avais entendu dire que l'héritage multiple n'était pas autorisé en Java. Pourquoi semble-t-il y avoir une exception pour les interfaces ?

216voto

Oui, vous pouvez le faire. Une interface peut étendre plusieurs interfaces, comme le montre ici :

interface Maininterface extends inter1, inter2, inter3 {  
  // methods
}

Une seule classe peut également implémenter plusieurs interfaces. Que se passe-t-il 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() {

    }     

}

Alors une seule implémentation fonctionne pour les deux :).

Lisez mon post complet ici :

http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html

92voto

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 et implements lorsque vous parlez d'interface et de classe.

23voto

shankar upadhyay Points 676

Depuis la page de documentation d'Oracle sur le type d'héritage multiple, nous pouvons trouver la réponse précise ici. Ici, il faut d'abord connaître le type d'héritage multiple en java :-

  1. Héritage multiple de l'état.
  2. Héritage multiple de l'implémentation.
  3. Héritage multiple du type.

Java "ne prend pas en charge l'héritage multiple de l'état, mais il prend en charge l'héritage multiple de l'implémentation avec des méthodes par défaut depuis la version 8 de java et l'héritage multiple du type avec les interfaces.

Ensuite, la question se pose pour le "problème diamant" et comment Java le gère :-

  1. Dans le cas de l'héritage multiple de l'implémentation, le compilateur java renvoie 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 {
    
                }

Donc ici nous obtiendrons une erreur comme :- interface D hérite de méthodes par défaut non reliées de types B et C interface D extends B, C

Vous pouvez le corriger ainsi :-

interface D extends B, C {
                @Override
                default void method() {
                    B.super.method();
                }
            }
  1. Dans l'héritage multiple du type, java le permet car une interface ne contient pas de champs mutables et une seule implémentation appartiendra à la classe, donc java ne pose aucun problème et vous permet de le faire.

En conclusion, nous pouvons dire que java ne prend pas en charge l'héritage multiple de l'état mais qu'il prend en charge l'héritage multiple de l'implémentation et l'héritage multiple du type.

11voto

Masud Points 10542

Est-ce qu'une interface peut étendre plusieurs interfaces en java?

La réponse est: Oui.

Conformément à 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 membres, méthodes abstraites et constantes des interfaces qu'elle étend, à l'exception de tout type de membre et de constantes qu'elle pourrait masquer.

4voto

AlexWien Points 15259

Vous pouvez étendre plusieurs Interfaces mais vous ne pouvez pas étendre plusieurs classes.

La raison pour laquelle il n'est pas possible en Java d'étendre plusieurs classes, c'est la mauvaise expérience de C++ où cela est possible.

L'alternative à l'héritage multiple est qu'une classe peut implémenter plusieurs interfaces (ou qu'une interface peut étendre plusieurs interfaces)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X