webentwicklung-frage-antwort-db.com.de

Warum kann eine Schnittstelle keine andere Schnittstelle implementieren?

Was ich meine ist:

interface B {...}

interface A extends B {...} // allowed  

interface A implements B {...} // not allowed

Ich habe es gegoogelt und fand this :

implements bezeichnet die Definition einer Implementierung für die Methoden einer Schnittstelle. Die Schnittstellen sind jedoch nicht implementiert, sodass dies nicht möglich ist.

Interface ist jedoch eine 100% abstrakte Klasse, und eine abstrakte Klasse kann Interfaces (100% abstrakte Klasse) implementieren, ohne ihre Methoden zu implementieren. Was ist das Problem, wenn es als "Schnittstelle" definiert wird?

Im Detail,

interface A {
    void methodA();
}

abstract class B implements A {} // we may not implement methodA() but allowed

class C extends B {
   void methodA(){}
} 

interface B implements A {} // not allowed. 
//however, interface B = %100 abstract class B
101
user467871

implements bedeutet Implementierung, wenn interface deklarieren soll, nur um interface nicht für die Implementierung bereitzustellen.

A 100% abstract class ist funktional äquivalent zu interface, kann aber auch implementiert werden, wenn Sie dies wünschen (in diesem Fall bleibt es nicht 100% abstract). Aus Sicht der JVM handelt es sich also um unterschiedliche Dinge .

Die Mitgliedsvariable in einer 100% abstrakten Klasse kann auch ein beliebiges Zugriffsqualifikationsmerkmal haben, wobei sie in einer Schnittstelle implizit public static final.

103
Jigar Joshi

implements bedeutet, dass ein Verhalten für abstract Methoden definiert wird (außer natürlich für abstrakte Klassen). Sie definieren die Implementierung.

extends bedeutet, dass ein Verhalten vererbt wird.

Bei Schnittstellen kann man sagen, dass eine Schnittstelle dasselbe Verhalten haben soll wie eine andere, es gibt nicht einmal eine tatsächliche Implementierung. Deshalb ist es sinnvoller, eine Schnittstelle zu extends einer anderen Schnittstelle zu machen, als sie zu implementieren.


Bedenken Sie, dass eine abstract -Klasse, auch wenn sie abstract -Methoden definieren kann (so wie es eine Schnittstelle tut), immer noch eine Klasse ist und immer noch hat geerbt (erweitert) und nicht implementiert werden.

24
Colin Hebert

Konzeptionell gibt es die beiden "Domänen" -Klassen und Schnittstellen. Innerhalb dieser Domänen, die Sie immer erweitern, implementiert nur eine Klasse eine Schnittstelle, die eine Art "Grenzüberschreitung" darstellt. "Erweitert" für Interfaces spiegelt also im Grunde das Verhalten für Klassen wider. Zumindest denke ich, dass dies die Logik dahinter ist. Es scheint, als ob nicht jeder mit dieser Art von Logik einverstanden ist (ich finde es ein bisschen selbst erfunden), und in der Tat gibt es keinen technischen Grund, überhaupt zwei verschiedene Schlüsselwörter zu haben.

4
Landei

Die Schnittstelle ist jedoch eine zu 100% abstrakte Klasse, und die abstrakte Klasse kann die Schnittstelle (zu 100% abstrakte Klasse) implementieren, ohne ihre Methoden zu implementieren. Was ist das Problem, wenn es als "Schnittstelle" definiert wird?

Dies ist einfach eine Frage der Konvention. Die Autoren der Sprache Java) haben entschieden, dass "extend" der beste Weg ist, um diese Beziehung zu beschreiben. Das ist es also, was wir alle verwenden.

Obwohl eine Schnittstelle eine "100% abstrakte Klasse" ist, denken wir im Allgemeinen nicht so über sie. Wir betrachten Interfaces normalerweise eher als ein Versprechen, bestimmte Schlüsselmethoden zu implementieren, als als eine Klasse, von der sie abgeleitet werden können. Aus diesem Grund verwenden wir für Benutzeroberflächen eine andere Sprache als für Klassen.

Wie andere behaupten, gibt es gute Gründe, sich für "Erweiterungen" gegenüber "Geräten" zu entscheiden.

2
Josiah Yoder

Hoffe, das wird dir ein bisschen helfen, was ich in meinem College in oops (Core Java) gelernt habe.

Implements bezeichnet die Definition einer Implementierung für die Methoden einer Schnittstelle. Die Schnittstellen sind jedoch nicht implementiert, sodass dies nicht möglich ist. Eine Schnittstelle kann jedoch eine andere Schnittstelle erweitern, dh, sie kann weitere Methoden hinzufügen und ihren Typ übernehmen.

Hier ist ein Beispiel, dies ist mein Verständnis und was ich in Oops gelernt habe.

interface ParentInterface{  
        void myMethod();  
}  

interface SubInterface extends ParentInterface{  
        void anotherMethod();  
}  

und denken Sie daran, dass eine Schnittstelle nur eine andere Schnittstelle erweitern kann. Wenn Sie die Funktion für eine Klasse definieren möchten, wird nur eine Schnittstelle implementiert, z. B. unten

public interface Dog
{
    public boolean Barks();

    public boolean isGoldenRetriever();
}

Wenn eine Klasse diese Schnittstelle implementieren würde, würde sie folgendermaßen aussehen:

public class SomeClass implements Dog
{
    public boolean Barks{
    // method definition here

    }

    public boolean isGoldenRetriever{
    // method definition here
    }
}

und wenn eine abstrakte Klasse über eine abstrakte Funktion verfügt, die definiert und deklariert wird, und Sie diese Funktion definieren möchten, oder wenn Sie sagen können, dass Sie diese Funktion implementieren, nehmen Sie an, dass Sie diese Klasse erweitern, da die abstrakte Klasse nur erweitert werden kann. Hier ist ein Beispiel unten.

public abstract class MyAbstractClass {

    public abstract void abstractMethod();
}

Hier ist eine Beispiel-Unterklasse von MyAbstractClass:

public class MySubClass extends MyAbstractClass {

    public void abstractMethod() {
        System.out.println("My method implementation");
    }
}
1
XxANxX