Inhaltsverzeichnis
1. Der Hintergrund der Einführung von Standardschnittstellenmethoden
2. Definition der Standardschnittstellenmethode
Heim Java javaLernprogramm Neue Funktionen von Java 8: Standardschnittstellenmethoden

Neue Funktionen von Java 8: Standardschnittstellenmethoden

Feb 23, 2017 am 10:25 AM
java8 新特性

Zusammenfassung: Ab Java8 ist die Schnittstelle nicht nur ein Ort, an dem Methoden deklariert werden können. Wir können der Methode auch eine Standardimplementierung geben, wenn wir sie als Standardschnittstellenmethode bezeichnen Implementieren Sie die Schnittstelle. Klassen können eine Standardimplementierung dieser Methode enthalten.

1. Der Hintergrund der Einführung von Standardschnittstellenmethoden

Java8 kann als die Version angesehen werden, die sich im iterativen Prozess der Java-Versionsaktualisierung am meisten geändert hat (nur durch Wenn wir mit der Zeit gehen, können wir uns freuen, dass er unsterblich ist), aber nach so vielen Jahren der Entwicklung und Iteration ist der Quellcode von Java zu einem Giganten geworden, und es wird definitiv nicht einfach sein, einen großen Schritt in diese Richtung zu machen ein riesiges Volumen. Als ich also zum ersten Mal die Standardschnittstellenmethoden von Java 8 sah, hatte ich zunächst das Gefühl, dass dies eine Lücke war, die von Java-Designern gegraben wurde, bevor sie sie füllten.

Aus den vorherigen Erklärungen wissen wir, dass Java8 den vorhandenen Schnittstellen viele Methoden hinzugefügt hat, beispielsweise die

sort(Comparator<? super E> c)
Nach dem Login kopieren

-Methode von List. Wenn Sie den Entwurfsideen von Schnittstellen vor Java 8 folgen und einer Schnittstelle eine Methodendeklaration hinzufügen, muss die Klasse, die die Schnittstelle implementiert, eine entsprechende Implementierung für die neu hinzugefügte Methode hinzufügen. Aus Kompatibilitätsgründen ist dies nicht ratsam, daher stellt es eine Falle dar, und neue Funktionen erfordern das Hinzufügen einiger neuer Methoden zur Schnittstelle. Um den Kuchen zu haben und ihn auch zu essen, haben die Designer von Java8 die Standardschnittstellenmethode vorgeschlagen . Konzept.

Auf diese Weise scheint die Standardschnittstellenmethode für API-Designer entwickelt zu sein, die für uns normale Entwickler noch weit entfernt ist. Es ist etwas verwirrend, so zu denken, obwohl wir kein JDK entwerfen müssen Im täglichen Entwicklungsprozess müssen wir weiterhin APIs bereitstellen, die andere Geschäftsparteien aufrufen können. Wenn wir unsere APIs aktualisieren, können wir die Standardmethode verwenden, um erweiterte Funktionen bereitzustellen und gleichzeitig die Kompatibilität aufrechtzuerhalten.

2. Definition der Standardschnittstellenmethode

Die Definition der Standardschnittstellenmethode ist sehr einfach, fügen Sie einfach ein

default
Nach dem Login kopieren
<🎜 vor der Methodendefinition hinzu der Schnittstelle >Schlüsselwörter reichen aus, wie folgt:


public interface A {
    /**
     * 默认方法定义
     */
    default void method() {
        System.out.println("This is a default method!");
    }
}
Nach dem Login kopieren
Wenn wir eine Standardmethode wie diese definieren, halten alle Unterklassen, die diese Schnittstelle implementieren, indirekt diese Methode. Oder Sie denken vielleicht wie ich, dass sich Schnittstellen und abstrakte Klassen tatsächlich immer ähnlicher werden, es aber immer noch die folgenden Unterschiede zwischen ihnen gibt:


1. Eine Klasse kann nur eine Klasse erben, aber mehrere implementieren Schnittstellen

2. Abstrakte Klassen können Variablen definieren, Schnittstellen jedoch nicht
Zusätzlich zur Lösung der oben genannten Probleme hat die Abstraktion auch die folgenden Vorteile:

1 sind nicht alle Für Methoden, die alle Unterklassen benötigen, geben wir ihr eine Standardimplementierung, um bedeutungslose Implementierungen in Unterklassen zu vermeiden (im Allgemeinen werden wir neue UnsupportedException() auslösen)

2 Die Standardmethode ist Java. Mehrfachvererbung bietet eine neue Weise (obwohl wir nur eine Klasse erben können, können wir mehrere Schnittstellen implementieren, und jetzt können Schnittstellen auch Standardmethoden definieren)

3. Konflikte und ihre Lösungen

Weil eine Klasse das kann Wenn mehrere Schnittstellen implementiert werden, treten Konflikte auf, wenn eine Klasse mehrere Schnittstellen implementiert und in diesen Schnittstellen zwei oder mehr Standardmethoden mit derselben Methodensignatur vorhanden sind. Java8-Definition Die folgenden drei Prinzipien werden zum Lösen von Konflikten verwendet:


1. Explizit deklarierte Methoden in einer Klasse oder übergeordneten Klasse haben eine höhere Priorität als alle Standardmethoden

2. Wenn Regel 1 fehlschlägt, wählen Sie die Standardmethode mit einer bestimmten Implementierung aus, die der aktuellen Klasse am nächsten kommt

3. Wenn Regel 2 ebenfalls fehlschlägt, müssen Sie die Schnittstelle explizit angeben
Das Folgende wird anhand mehrerer Beispiele erklärt:

Beispiel 1


public interface A {
    /**
     * 默认方法定义
     */
    default void method() {
        System.out.println("A&#39;s default method!");
    }
}
public interface B extends A {
    /**
     * 默认方法定义
     */
    default void method() {
        System.out.println("B&#39;s default method!");
    }
}
public class C implements A, B {
    public static void main(String[] args) {
        new C().method();
    }
}
// 输出:B&#39;s default method!
Nach dem Login kopieren
Hier Da Schnittstelle B näher an C als A liegt und die Methode von B gemäß Regel 2 eine bestimmte Standardimplementierung ist, wird sie hier tatsächlich als Standardmethode von Schnittstelle B bezeichnet


Beispiel 2

public class D implements A {
}
public class C extends D implements A, B {
    public static void main(String[] args) {
        new C().method();
    }
}
// 输出:B&#39;s default method!
Nach dem Login kopieren
Beispiel 2 fügt eine Klasse D hinzu, die die Schnittstelle A auf der Grundlage der ursprünglichen Schnittstellen A und B implementiert, und dann erbt Klasse C von D und implementiert A und B. Obwohl C näher an D liegt, Da sich die spezifische Implementierung von D in A befindet, ist die Standardmethode in B immer noch die nächstgelegene Standardimplementierung. Gemäß Regel 2 wird hier tatsächlich die Standardmethode von B aufgerufen.


Beispiel 3

// A接口不变
public interface B {
    /**
     * 默认方法定义
     */
    default void method() {
        System.out.println("B&#39;s default method!");
    }
}
public class C implements A, B {
    @Override
    public void method() {
        // 必须显式指定
        B.super.method();
    }
    public static void main(String[] args) {
        new C().method();
    }
}
Nach dem Login kopieren
In Beispiel 3 erbt Schnittstelle B nicht mehr von Schnittstelle A, daher wird zu diesem Zeitpunkt die Standardmethode in C aufgerufen


method()
Nach dem Login kopieren
Der spezifische Implementierungsabstand der Schnittstellen A und B ist derselbe und der Compiler kann ihn nicht bestimmen. Daher wird ein Fehler gemeldet. In diesem Fall muss er explizit angegeben werden:

B.super.method()
Nach dem Login kopieren
.

Das Obige ist der Inhalt der neuen Funktion von Java8, der Standardschnittstellenmethode. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
<🎜> obscur: Expedition 33 - So erhalten Sie perfekte Chroma -Katalysatoren
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1677
14
PHP-Tutorial
1278
29
C#-Tutorial
1257
24
Wie berechnet man das Datum vor einem Jahr oder einem Jahr später in Java 8? Wie berechnet man das Datum vor einem Jahr oder einem Jahr später in Java 8? Apr 26, 2023 am 09:22 AM

Java8 berechnet das Datum vor einem Jahr oder ein Jahr später mithilfe der minus()-Methode, um das Datum vor einem Jahr zu berechnen packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDate previousYear=today.minus(1,ChronoUni

PHP 8.3 veröffentlicht: Neue Features auf einen Blick PHP 8.3 veröffentlicht: Neue Features auf einen Blick Nov 27, 2023 pm 12:52 PM

PHP8.3 veröffentlicht: Überblick über neue Funktionen Da sich die Technologie weiterentwickelt und sich ändern muss, werden Programmiersprachen ständig aktualisiert und verbessert. PHP ist eine in der Webentwicklung weit verbreitete Skriptsprache und wurde ständig verbessert, um Entwicklern leistungsfähigere und effizientere Tools zur Verfügung zu stellen. Die kürzlich veröffentlichte PHP 8.3-Version bringt viele lang erwartete neue Funktionen und Verbesserungen. Werfen wir einen Blick auf einen Überblick über diese neuen Funktionen. Initialisierung von Nicht-Null-Eigenschaften Wenn in früheren Versionen von PHP einer Klasseneigenschaft nicht explizit ein Wert zugewiesen wurde, ist es ihr Wert

Ein Leitfaden zum Erlernen der neuen Funktionen von PHP8 und zum Erwerb eines tiefgreifenden Verständnisses der neuesten Technologie Ein Leitfaden zum Erlernen der neuen Funktionen von PHP8 und zum Erwerb eines tiefgreifenden Verständnisses der neuesten Technologie Dec 23, 2023 pm 01:16 PM

Eine ausführliche Analyse der neuen Funktionen von PHP8, um Ihnen zu helfen, die neueste Technologie zu beherrschen. Im Laufe der Zeit hat sich die Programmiersprache PHP ständig weiterentwickelt und verbessert. Die kürzlich veröffentlichte PHP8-Version bietet Entwicklern viele spannende neue Funktionen und Verbesserungen, die unsere Entwicklungsarbeit komfortabler und effizienter machen. In diesem Artikel analysieren wir die neuen Funktionen von PHP8 eingehend und stellen spezifische Codebeispiele bereit, die Ihnen helfen, diese neuesten Technologien besser zu beherrschen. Der JIT-Compiler PHP8 führt die JIT-Kompilierung (Just-In-Time) ein

Wie berechnet man das Datum eine Woche später mit Java 8? Wie berechnet man das Datum eine Woche später mit Java 8? Apr 21, 2023 pm 11:01 PM

So berechnen Sie das Datum eine Woche später in Java8. In diesem Beispiel wird das Datum eine Woche später berechnet. Das LocalDate-Datum enthält keine Zeitinformationen. Seine plus()-Methode wird zum Hinzufügen von Tagen, Wochen und Monaten verwendet. Die ChronoUnit-Klasse deklariert diese Zeiteinheiten. Da LocalDate ebenfalls ein unveränderlicher Typ ist, müssen Sie Variablen verwenden, um nach der Rückgabe Werte zuzuweisen. packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[

Was sind die neuen Funktionen von PHP8? Was sind die neuen Funktionen von PHP8? Sep 25, 2023 pm 01:34 PM

Zu den neuen Funktionen von PHP8 gehören JIT-Compiler, Typableitung, benannte Parameter, Union-Typen, Eigenschaften, Verbesserungen bei der Fehlerbehandlung, Unterstützung für asynchrone Programmierung, neue Standardbibliotheksfunktionen und anonyme Klassenerweiterungen. Detaillierte Einführung: 1. JIT-Compiler, PHP8 führt den JIT-Compiler ein, der eine wichtige Leistungsverbesserung darstellt. Der JIT-Compiler kann einige hochfrequente Ausführungscodes in Echtzeit kompilieren und optimieren, wodurch die Ausführungsgeschwindigkeit verbessert wird führt die Typinferenzfunktion ein, die es Entwicklern ermöglicht, beim Deklarieren von Variablen usw. automatisch den Typ von Variablen abzuleiten.

Interpretation neuer Funktionen der Go-Sprache: effizientere Programmierung Interpretation neuer Funktionen der Go-Sprache: effizientere Programmierung Mar 10, 2024 pm 12:27 PM

[Interpretation neuer Funktionen der Go-Sprache: Um die Programmierung effizienter zu gestalten, sind spezifische Codebeispiele erforderlich.] In den letzten Jahren hat die Go-Sprache im Bereich der Softwareentwicklung große Aufmerksamkeit auf sich gezogen, und ihr einfaches und effizientes Designkonzept hat immer mehr Aufmerksamkeit erregt Entwickler. Als statisch typisierte Programmiersprache führt die Go-Sprache weiterhin neue Funktionen ein, um die Entwicklungseffizienz zu verbessern und den Code-Schreibprozess zu vereinfachen. In diesem Artikel werden die neuesten Funktionen der Go-Sprache ausführlich erläutert und anhand spezifischer Codebeispiele erläutert, wie Sie den Komfort dieser neuen Funktionen erleben können. Modulare Entwicklung (GoModules) Go-Sprache ab 1

Ein Überblick über die neuen Funktionen von CSS3: So erzielen Sie mit CSS3 Übergangseffekte Ein Überblick über die neuen Funktionen von CSS3: So erzielen Sie mit CSS3 Übergangseffekte Sep 09, 2023 am 11:27 AM

Übersicht über die neuen Funktionen von CSS3: So erzielen Sie mit CSS3 Übergangseffekte. CSS3 ist die neueste Version von CSS. Unter den vielen neuen Funktionen dürfte der Übergangseffekt die interessanteste und praktischste sein. Übergangseffekte können unsere Seiten während der Interaktion flüssiger und schöner machen und den Benutzern ein gutes visuelles Erlebnis bieten. In diesem Artikel wird die grundlegende Verwendung von CSS3-Übergangseffekten mit entsprechenden Codebeispielen vorgestellt. Attribut „transition-property“: Geben Sie den CSS-Eigenschaftsübergangseffekt an, der überführt werden muss

Überblick über die neuen Funktionen von CSS3: So verwenden Sie CSS3, um ein horizontal zentriertes Layout zu erreichen Überblick über die neuen Funktionen von CSS3: So verwenden Sie CSS3, um ein horizontal zentriertes Layout zu erreichen Sep 09, 2023 pm 04:09 PM

Überblick über die neuen Funktionen von CSS3: So verwenden Sie CSS3, um ein horizontal zentriertes Layout zu erreichen. Bei Webdesign und -layout ist ein horizontal zentriertes Layout eine häufige Anforderung. In der Vergangenheit haben wir dazu oft komplexe JavaScript- oder CSS-Tricks eingesetzt. Mit CSS3 wurden jedoch einige neue Funktionen eingeführt, die horizontal zentrierte Layouts einfacher und flexibler machen. In diesem Artikel werden einige neue Funktionen von CSS3 vorgestellt und einige Codebeispiele bereitgestellt, um zu veranschaulichen, wie Sie mit CSS3 ein horizontal zentriertes Layout erreichen. 1. Verwenden Sie Flexbox zum Layouten der Datei

See all articles