web-dev-qa-db-fra.com

Une interface peut-elle étendre plusieurs interfaces en Java?

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?

116
Prateek

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

157
Suresh Atta

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.

8
Masudul

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)

3
AlexWien

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

2
Hoang Ong

À 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: -

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

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: -

  1. 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();
                }
            }
  1. Dans l'héritage multiple de type Java, il est autorisé, car l'interface ne contient pas de champs mutables et qu'une seule implémentation appartient à la classe. Java ne pose aucun problème et vous permet de fais le.

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 .

2
shankar upadhyay

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.

1
Cem Sultan