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.
java
terminology
interfaces
inheritance
definition
RajeeV VenkaT
quelle
quelle
Antworten:
UPDATE: Ich habe diese Antwort überarbeitet. In den Kommentaren, die es verdient haben, hervorgehoben zu werden, wurden einige gute Punkte angesprochen.
Es ist nicht ganz klar, was Sie mit "Nachvererbung" meinen. Lassen Sie uns eine etwas andere Frage stellen?
Diese unterscheiden sich geringfügig. Das ist bedauerlich, weil es verwirrend ist.
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.
Ja, manche sind. Weitere Informationen finden Sie in Abschnitt 8.4.8 der Java-Spezifikation, den ich hier für Sie zitiere.
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.)
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.
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.
quelle
java
so dass dies die richtige Antwort ist, es sei denn, das OP bedeutete etwas anderesjava
:-)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.
quelle
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.
quelle