Ich dachte darüber nach und hatte einige Zweifel.
Wenn ich eine Schnittstelle deklariere, zum Beispiel:
public interface MyInterface
{
public void method1();
public void method2();
}
Könnten diese Schnittstellenmethoden als abstrakt angesehen werden? Was ich meine ist, dass das Konzept einer abstrakten Methode ist:
Eine abstrakte Methode ist eine deklarierte Methode, die jedoch keine Implementierung enthält.
Könnten diese Methoden als abstrakt angesehen werden? Sie sind keine "reinen" abstrakten Methoden, da ich das abstract
Wort nicht verwende , aber konzeptionell sieht es so aus, als ob sie es sind.
Was kannst du mir darüber erzählen?
Vielen Dank.
Antworten:
Eine Schnittstelle ist wie eine "rein" abstrakte Klasse. Die Klasse und alle ihre Methoden sind abstrakt. Eine abstrakte Klasse kann Methoden implementiert haben, aber die Klasse selbst kann nicht instanziiert werden (nützlich für die Vererbung und das Folgen von DRY).
Da für eine Schnittstelle überhaupt keine Implementierung vorhanden ist, sind sie für ihren Zweck nützlich: einen Vertrag. Wenn Sie die Schnittstelle implementieren, müssen Sie die Methoden in der Schnittstelle implementieren.
Der Unterschied besteht also darin, dass eine abstrakte Klasse Methoden implementieren kann, eine Schnittstelle jedoch nicht.
Der Grund dafür ist, dass eine Klasse mehrere Schnittstellen implementieren kann. Java und C # beschränken eine Klasse auf eine einzige übergeordnete Klasse. In einigen Sprachen können Sie von mehreren Klassen erben und die Arbeit eines Interfaces über eine "rein" abstrakte Klasse erledigen. Aber Mehrfachvererbung hat ihre Probleme, nämlich das gefürchtete Diamantproblem
quelle
Ich habe hier eine nützliche Antwort gefunden: http://download.oracle.com/javase/tutorial/java/IandI/abstract.html
quelle
Abstrakte Klassen können abstrakte Methoden haben.
Schnittstellen können nur abstrakte Methoden haben.
method1()
undmethod2()
in Ihrem Beispiel sind abstrakte Methoden.quelle
Der Unterschied besteht darin, dass abstrakte Klassen Implementierungsdetails enthalten können, die jedoch nicht selbst instanziiert werden können. Während eine Schnittstelle nur eine Vorlage für eine Klasse ist
quelle
Interface-Klassen haben keine abstrakten Methoden. Sie haben überhaupt keine Methoden. Sie haben nur eine Liste von Methoden, die eine andere Klasse implementieren müsste, um sich an die Schnittstelle anpassen zu können. In Ihrem Beispiel gibt es keine Methode method1 und keine Methode method2, bis jemand einer Klasse diese Methoden hinzufügt.
quelle