Ich habe über Schnittstellen gelernt, als ich bemerkte, dass Sie jetzt statische und Standardmethoden in einer Schnittstelle definieren können.
public interface interfacesample2 {
public static void method() {
System.out.println("hello world");
}
public default void menthod3() {
System.out.println("default print");
}
}
Erklären Sie bitte den Unterschied zwischen den beiden und auch wenn es ein Beispiel dafür gibt, wann wir dies verwenden würden, wäre es schön. Ein wenig verwirrt über Schnittstellen.
default implementation
einer Methode, die möglicherweise überschrieben wird.Antworten:
Unterschiede zwischen statischen und Standardmethoden in Java 8:
1) Standardmethoden können beim Implementieren von Klassen überschrieben werden, statische nicht .
2) Die statische Methode gehört nur zur Interface-Klasse. Sie können also nur die statische Methode für die Interface-Klasse aufrufen, nicht für die Klasse, die diese Schnittstelle implementiert. Siehe:
3) Sowohl Klasse als auch Schnittstelle können statische Methoden mit demselben Namen haben und keine überschreibt andere!
quelle
purpose
( verwendet eine gemeinsame Umsetzung ) und mehrdeutige Begriffe durchimplementing the logic again in subclass
( überschreiben, versteckt ). Der einzig vernünftige Grund wäre der Grund, dass [statische Schnittstellenmethoden nicht vererbt werden] ( stackoverflow.com/questions/25169175/… ) und wir sie daher nicht mit einer Unterklasseninstanz aufrufen können.Eine statische Methode ist eine Methode, die sozusagen auf den Klassennamensraum angewendet wird. So ein
static
Verfahrenfoo
der SchnittstelleInterface
zugegriffen durchInterface.foo()
. Beachten Sie, dass der Funktionsaufruf nicht für eine bestimmte Instanz der Schnittstelle gilt.Eine Standardimplementierung wird
bar
dagegen von aufgerufenEine
static
Schnittstellenmethode kann diethis
Variable nicht kennen , eine Standardimplementierung jedoch.quelle
Statische Schnittstellenmethoden sind wie statische Klassenmethoden (hier gehören sie nur zur Schnittstelle). Wobei als Standardschnittstellenmethoden Schnittstellenmethoden
default implementation
bereitgestellt werden (welche implementierenden Klassen möglicherweiseoverride
).Denken Sie jedoch daran, falls dies eine Klasse ist
implementing more than one interface with same default
implementierende Klasse Methodensignatur handeltneeds to override the default method
Unten finden Sie ein einfaches Beispiel (kann DIY für verschiedene Fälle)
Das hängt von Ihrer Problemstellung ab. Ich würde sagen, Standardmethoden sind nützlich, wenn Sie dieselbe Implementierung für eine Methode in Ihrer Spezifikation in allen Klassen in diesem Vertrag benötigen, oder sie kann wie folgt verwendet werden
Adapter
Klassen verwendet werden.Hier ist eine gute Lektüre: /software/233053/why-were-default-and-static-methods-added-to-interfaces-in-java-8-when-we-alread
Ebenfalls unten erläutert Oracle Doc Standard- und statische Methoden zum Entwickeln vorhandener Schnittstellen:
http://docs.oracle.com/javase/tutorial/java/IandI/nogrow.html
quelle
Hier ist meine Ansicht:
statische Methode in der Schnittstelle:
Sie können es direkt aufrufen (InterfacetA.staticMethod ())
Die Unterklasse kann nicht überschrieben werden.
Die Unterklasse kann eine Methode mit demselben Namen wie staticMethod haben
Standardmethode in der Schnittstelle:
Sie können es nicht direkt aufrufen.
Die Unterklasse kann sie überschreiben
Vorteil:
statische Methode: Sie müssen keine separate Klasse für die Dienstprogrammmethode erstellen.
Standardmethode: Stellen Sie die allgemeine Funktionalität der Standardmethode bereit.
quelle
Dieser Link enthält einige nützliche Erkenntnisse, von denen einige hier aufgelistet sind.
Standard- und statische Methoden haben die Unterschiede zwischen Schnittstellen und abstrakten Klassen überbrückt .
Standardmethoden der Schnittstelle :
Statische Methoden der Schnittstelle :
Zitieren Sie gerne eine weitere nützliche Referenz .
quelle
Standardmethoden der Schnittstelle:
Es hilft dabei, Dienstprogrammklassen zu vermeiden, da alle Collections-Klassenmethoden in den Schnittstellen selbst bereitgestellt werden können.
Es hilft beim Erweitern von Schnittstellen, ohne die Angst zu haben, Implementierungsklassen zu brechen.
Statische Methoden der Schnittstelle:
Sie sind Teil der Schnittstelle. Wir können sie nicht für Implementierungsklassenobjekte verwenden.
Es hilft bei der Bereitstellung von Sicherheit, indem es Implementierungsklassen nicht erlaubt, sie zu überschreiben.
Nun, wie statische Methode Sicherheit bietet. Sehen wir uns ein Beispiel an.
Hier bedeutet das
obj.newMethod();
Drucken der Klassenimplementierungslogik, dass wir die Logik dieser Methode innerhalb der Implementierungsklasse ändern können.Aber
obj.anotherNewMethod();
Druckklassen-Implementierungslogik, aber nicht geänderte Schnittstellenimplementierung. Wenn also eine Verschlüsselungs- / Entschlüsselungslogik in diese Methode geschrieben ist, können Sie diese nicht ändern.quelle
Laut Javadocs von Oracle: http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
Normalerweise wird die statische Methode in der Schnittstelle als Hilfsmethode verwendet, während die Standardmethode als Standardimplementierung für Klassen verwendet wird, die diese Schnittstelle implementieren.
Beispiel:
quelle
Per Java14 JLS doc:
Standardmethode:
Es ist eine Instanzmethode, die in einer Schnittstelle mit dem Standardmodifikator deklariert ist
Auf sie kann nur von der Instanz der implementierenden Klasse zugegriffen werden
Sein Hauptteil wird immer durch einen Block dargestellt, der eine Standardimplementierung oder ein Standardverhalten für jede implementierende Klasse bereitstellt, ohne die Methode zu überschreiben
Es kann niemals statisch oder privat sein
Statische Methode:
Es kann von der Schnittstelle ohne Verweis auf ein bestimmtes Objekt aufgerufen werden, genau wie Klassenstatikmethoden
Die statische Methode kann privat sein
Die implementierende Klasse kann nicht auf statische Methoden zugreifen
Verstehen wir es mit Hilfe des folgenden Beispielcodes:
quelle
Wir können nicht ausführen,
Interfacesample2.menthod3();
da es sich nicht um eine statische Methode handelt. Zur Ausführungmethod3()
benötigen wir eine Instanz derInterfacesample2
Schnittstelle.Hier finden Sie folgendes praktisches Beispiel:
quelle
Das Starten der Java 8-Schnittstelle kann auch eine statische Methode haben. Wie die statische Methode einer Klasse kann die statische Methode einer Schnittstelle unter Verwendung des Schnittstellennamens aufgerufen werden.
Beispiel
Der Unterschied zwischen der statischen und der Standardmethode der Schnittstelle besteht darin, dass die Standardmethode die Vererbung unterstützt, die statische Methode jedoch nicht. Die Standardmethode kann beim Erben der Schnittstelle überschrieben werden.
Hier finden Sie Informationen zur Standardmethode der Schnittstelle und zur statischen Methode. Standardmethode der Schnittstelle in Java 8
quelle
Alle guten Antworten hier. Ich möchte eine weitere praktische Verwendung der statischen Funktion in der Schnittstelle hinzufügen. Der Tipp stammt aus dem Buch - Effective Java, 3. Auflage von Joshua Bloch in Kapitel 2: Erstellen und Zerstören von Objekten.
Statische Factory-Methoden sind Methoden, die ein Objekt zurückgeben. Sie arbeiten wie Konstrukteure. In bestimmten Fällen bietet die statische Factory-Methode besser lesbaren Code als die Verwendung des Konstruktors.
Zitat aus dem Buch - Effective Java, 3. Auflage von Joshua Bloch
Der Autor gibt ein Beispiel für Sammlungen, in denen eine solche statische Factory-Methode implementiert ist. Josh Bloch, der den Code überprüft, kann als Erstautor der Collections-Klasse angesehen werden. Obwohl Sammlungen eine Klasse und keine Schnittstelle ist. Das Konzept gilt jedoch weiterhin.
Weiter erklärt er, dass API nicht nur kleiner ist, sondern auch die Lesbarkeit des Codes und die API erleichtert.
Hier ist eine der statischen Methoden aus der Klasse java.util.Collections:
quelle