Kann eine Schnittstelle mehrere Schnittstellen in Java erweitern?

Lesezeit: 5 Minuten

Kann eine Schnittstelle mehrere Schnittstellen in Java erweitern
Prateek

Kann eine Schnittstelle mehrere Schnittstellen in Java erweitern? Dieser Code erscheint in meiner IDE gültig und wird kompiliert:

interface Foo extends Runnable, Set, Comparator<String> { }

aber ich hatte gehört, dass die Mehrfachvererbung in Java nicht erlaubt ist. Warum scheint es eine Ausnahme für Schnittstellen zu geben?

  • Welche Artikel sagen, dass es nicht möglich ist? Entweder sind sie falsch, oder Sie haben sie falsch verstanden und sprechen eher von Klassen als von Schnittstellen.

    Benutzer395760

    23. Okt ’13 um 15:47

  • Diese Frage scheint nicht zum Thema zu gehören, da sie leicht durch Selbstrecherche beantwortet werden könnte

    – JoseK

    23. Okt ’13 um 15:49

  • @StephenC Wenn er widersprüchliche Artikel gefunden hat, sollte er sie veröffentlichen. Auf diese Weise wissen die Leute, dass sie diese Artikel nicht lesen sollten…

    – Aber ich bin keine Wrapper-Klasse

    23. Okt ’13 um 15:53


  • Die Antwort auf diese Frage hat mir Zeit gespart. Ich behaupte, dass es als gültige Frage einen Wert hat.

    – xdhmoore

    30. März ’15 um 17:09

  • hilfreiche Frage, ich habe dies in der Erwartung gemacht, dass meine IDE einige Warnungen ausgibt, war erstaunt, keine zu sehen. Also habe ich unwissentlich dieselbe Frage wie die Ops in Google eingegeben, die mich mit einigen Antworten / Bestätigungen auf diese Seite geführt hat

    – Arthur

    23. Juni ’16 um 2:37

1641948796 176 Kann eine Schnittstelle mehrere Schnittstellen in Java erweitern
Suresh Atta

Ja, Sie können es tun. Eine Schnittstelle kann mehrere Schnittstellen erweitern, wie hier gezeigt:

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

Eine einzelne Klasse kann auch mehrere Schnittstellen implementieren. Was ist, wenn zwei Schnittstellen eine Methode haben, die denselben Namen und dieselbe Signatur definiert?

Es gibt einen kniffligen Punkt:

interface A {
    void test();
}

interface B {
    void test();
}

class C implements A, B {

    @Override
    public void test() {

    }     

}

Dann funktioniert eine einzelne Implementierung für beide :).

Lesen Sie hier meinen kompletten Beitrag:

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

  • @RahulBhadana Abstrakte Methode sollte überschreiben, oder?

    – Suresh Atta

    28. Juli ’14 um 8:02

  • Was ist, wenn Sie Schnittstelle A mit haben void test() und Schnittstelle B mit boolean test()? (Ist das ein Cousin von der Diamantproblem?) __Ausprobiert und das Vernünftige passiert: nicht erlaubt, wenn der Rückgabetyp anders ist.

    – Daniel

    6. Januar ’15 um 17:38

  • @sureshatta – was passiert also? macht es ruf beide an ??

    – Fett

    8. Dezember ’16 um 14:51

  • Eine Klasse lässt keine 2 Methoden derselben Signatur mit unterschiedlichem Rückgabetyp zu. stackoverflow.com/questions/16149285/…

    – Ninh Pham

    26. März ’17 um 11:59

Ein Schnittstelle kann Erweitern Sie mehrere Schnittstellen.

EIN Klasse kann mehrere Schnittstellen implementieren.

Jedoch a Klasse kann nur eine einzelne Klasse erweitern.

Pass auf, wie du die Wörter verwendest extends und implements wenn man darüber spricht interface und class.

1641948796 953 Kann eine Schnittstelle mehrere Schnittstellen in Java erweitern
Shankar Upadhyay

Auf der Oracle-Dokumentationsseite zum Mehrfachvererbungstyp finden wir die genaue Antwort Hier. Hier sollten wir zuerst die Art der Mehrfachvererbung in Java kennen:

  1. Mehrfachvererbung des Staates.
  2. Mehrfachvererbung der Implementierung.
  3. Mehrfachvererbung des Typs.

Java “unterstützt nicht die mehrfache Vererbung des Zustands, aber es unterstützt die mehrfache Vererbung der Implementierung mit Standardmethoden seit Java 8-Release und die mehrfache Vererbung des Typs mit Schnittstellen.

Dann stellt sich hier die Frage nach “Diamantproblem” und wie Java damit umgeht:-

  1. Bei mehrfacher Vererbung der Implementierung gibt der Java-Compiler einen Kompilierungsfehler aus und fordert den Benutzer auf, ihn durch Angabe des Schnittstellennamens zu beheben. Beispiel hier:-

                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 {
    
                }
    

Hier erhalten wir also einen Fehler, da:-Schnittstelle D nicht verwandte Standardwerte für method() von den Typen B und C erbt Schnittstelle D B, C . erweitert

Sie können es reparieren wie:-

interface D extends B, C {
                @Override
                default void method() {
                    B.super.method();
                }
            }
  1. Bei der Mehrfachvererbung des Typs Java erlaubt dies, da die Schnittstelle keine veränderlichen Felder enthält und nur eine Implementierung zur Klasse gehört, sodass Java keine Probleme verursacht und dies ermöglicht.

Zusammenfassend können wir sagen, dass java unterstützt nicht Mehrfachvererbung des Staates aber es unterstützt Mehrfachvererbung der Implementierung und Mehrfachvererbung des Typs.

  • Ich denke, dies ist eine geeignetere Antwort und klärt die Frage mehr. +1

    – Ketan Joshi

    20. November 19 um 17:36 Uhr

  • Danke @KetanJoshi das motiviert sehr zum Weitermachen 🙂

    – Shankar Upadhyay

    21.11.19 um 10:20


  • Interface kann keine Methoden definieren, wie in Ihren Beispielen.

    – Achtung

    24. Mai ’21 um 12:23


  • @Danger Hier liegt der Fokus nicht auf der Definition einer Methode innerhalb der Schnittstelle, offensichtlich können wir sie ab Java 8 definieren. Hoffe ich habe dir geantwortet. Danke Shankar

    – Shankar Upadhyay

    24. Mai ’21 um 13:18

  • Hallo @shankarupadhyay, ich sage nur, wenn Sie eine Schnittstelle definieren, fügen Sie keine Methodenimplementierung in eine Schnittstelle ein, deklarieren Sie einfach die Methoden oder verwenden Sie eine Klasse. Als Entwickler sollten wir diese Fehler nicht machen, auch wenn der Fokus auf etwas anderem liegt.

    – Achtung

    26. Mai ’21 um 7:40

Kann eine Schnittstelle mehrere Schnittstellen in Java erweitern?

Antwort ist: Ja.

Gemäß JLS

Eine Schnittstelle kann als direkte Erweiterung einer oder mehrerer anderer Schnittstellen deklariert werden, d. h. sie gibt implizit alle Membertypen, abstrakten Methoden und Konstanten der erweiterten Schnittstellen an, mit Ausnahme von Membertypen und Konstanten, die sie möglicherweise verbirgt.

Sie können mehrere verlängern Interfaces aber du kannst nicht mehrere verlängern classes.

Der Grund dafür, dass es in Java nicht möglich ist, mehrere Klassen zu erweitern, sind die schlechten Erfahrungen mit C++, wo dies möglich ist.

Die Alternative zur Mehrfachvererbung besteht darin, dass eine Klasse mehrere Schnittstellen implementieren kann (oder eine Schnittstelle mehrere Schnittstellen erweitern kann).

Kann eine Schnittstelle mehrere Schnittstellen in Java erweitern
Cem Sultan

Ich denke, Ihre Verwirrung liegt in der Mehrfachvererbung, bei der dies eine schlechte Praxis ist und in Java auch nicht möglich ist. Die Implementierung mehrerer Schnittstellen ist jedoch in Java erlaubt und auch sicher.

1641948797 819 Kann eine Schnittstelle mehrere Schnittstellen in Java erweitern
mmdc

Eine Java-Klasse kann nur eine Elternklasse erweitern. Mehrfachvererbung ist nicht zulässig. Schnittstellen sind jedoch keine Klassen, und eine Schnittstelle kann mehr als eine übergeordnete Schnittstelle erweitern.

Schau zum Beispiel hier: http://www.tutorialspoint.com/java/java_interfaces.htm

.

403150cookie-checkKann eine Schnittstelle mehrere Schnittstellen in Java erweitern?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy