Wenn meine Klasse implements
eine Schnittstelle ist, kann ich dann sagen, dass ich der Vererbung folge? Ich weiß, wenn eine Klasse eine extends
andere Klasse ist, dann ist es Vererbung.
Wenn meine Klasse implements
eine Schnittstelle ist, kann ich dann sagen, dass ich der Vererbung folge? Ich weiß, wenn eine Klasse eine extends
andere Klasse ist, dann ist es Vererbung.
Antworten:
UPDATE: Ich habe diese Antwort überarbeitet. In den Kommentaren, die es verdient haben, hervorgehoben zu werden, wurden einige gute Punkte angesprochen.
Wenn meine Klasse eine Schnittstelle implementiert, kann ich dann sagen, dass ich der Vererbung folge?
Es ist nicht ganz klar, was Sie mit "Nachvererbung" meinen. Lassen Sie uns eine etwas andere Frage stellen?
Was ist Vererbung?
Diese unterscheiden sich geringfügig. Das ist bedauerlich, weil es verwirrend ist.
Welche Verwirrungen ergeben sich typischerweise aus dieser subtilen Unterscheidung?
Es kann zu Verwirrung kommen, weil die Leute die Vererbung als einen Mechanismus zur Weitergabe von Implementierungsdetails ansehen. Obwohl es sich um einen solchen Mechanismus handelt, funktioniert dieser Mechanismus, indem Mitglieder geteilt werden . Diese Mitglieder müssen keine Implementierungen haben! Wie wir sehen werden, können sie abstrakt sein.
Ich persönlich wäre glücklicher, wenn die Java- und C # -Spezifikationen ein anderes Wort als "inherits" verwenden würden, um die Beziehung zwischen Schnittstellenmethoden und Klassen zu beschreiben, um diese Verwirrung zu vermeiden. Aber sie tun es nicht, und wir müssen uns aus den Spezifikationen herleiten, nicht gegen sie.
Werden in Java Schnittstellenmember von Klassen geerbt, die sie implementieren?
Ja, manche sind. Weitere Informationen finden Sie in Abschnitt 8.4.8 der Java-Spezifikation, den ich hier für Sie zitiere.
Eine Klasse C erbt von ihrer direkten Superklasse und direkten Superschnittstelle alle abstrakten und Standardmethoden m, für die alle der folgenden Bedingungen zutreffen: [...]
Wenn Sie sagen, dass eine Klasse eine Schnittstelle implementiert, erbt die Klasse die abstrakten und Standardmethoden dieser Schnittstelle . (Natürlich habe ich die folgenden Bedingungen ausgelassen; Einzelheiten finden Sie in der Spezifikation. Insbesondere wird nicht davon ausgegangen, dass eine Klasse, die ein Mitglied einer Schnittstelle implementiert, dieses Mitglied geerbt hat. Ist dies wiederum verwirrend? Ja.)
Sagen wir in Java normalerweise, dass eine Klasse von einer Schnittstelle erbt?
Normalerweise würden wir sagen, dass eine Klasse eine Schnittstelle implementiert . Wie oben erwähnt, kann eine Klasse Mitglieder von einer Schnittstelle erben und dennoch nicht von der Schnittstelle erben. Was verwirrend ist, ja.
Ist diese subtile Unterscheidung für die tägliche Arbeit von Bedeutung?
Normalerweise nicht. Diese Art der engen Analyse der Spezifikation ist für Compiler-Autoren nützlicher als für Branchenentwickler. Es ist wichtiger zu verstehen, wann eine Schnittstelle verwendet werden soll, als eine genaue Definition von "Erben von" zu erhalten.
java
so dass dies die richtige Antwort ist, es sei denn, das OP bedeutete etwas anderes java
:-)
Vererbung bedeutet das Schreiben einer neuen Unterklasse für eine Superklasse. Das Schreiben einer neuen Klasse für eine Schnittstelle implementiert diese Schnittstelle. (Und das Schreiben einer neuen Schnittstelle auf der Grundlage einer alten Schnittstelle erweitert diese Schnittstelle.)
Der einzig richtige Begriff, der für alle drei Möglichkeiten gilt, ist Subtypisierung . Nicht jeder Subtyp ist eine Subklasse.
Mit Unterklassen , Sie
Mit Schnittstellen erfüllen Sie einen Vertrag, indem Sie die deklarierten Methoden implementieren .
Das ist die klassische Sichtweise. Jetzt mit Java 8 werden die Schnittstellen eine Mischung:
Würde die Implementierung einer Schnittstelle, deren Methoden alle Standardimplementierungen aufweisen, immer noch als "implementieren" oder eher als Erweiterung gelten? Ich konnte es nicht sagen. Da dieser Fall ziemlich weit hergeholt ist (diese tatsächlich aktivierte zustandslose Mehrfachvererbung), würde ich "Vererbung" immer noch nur bei Unterklassen verwenden.