English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Java 8 Neue Standardmethoden für Schnittstellen hinzugefügt.
Kurz gesagt, Standardmethoden sind Methoden, die eine Schnittstelle haben können, und die Implementierungsklasse muss diese Methoden nicht implementieren.
Wir können einfach eine Standardmethode durch das Hinzufügen des Schlüsselworts default vor dem Methodennamen realisieren.
Warum sollte diese Eigenschaft existieren?
Zunächst war die frühere Schnittstelle ein Double-edged Sword, der Vorteil ist die Programmierung auf Abstraktion anstatt auf Konkretes, der Nachteil ist, dass, wenn eine Schnittstelle geändert werden muss, alle Klassen, die diese Schnittstelle implementieren, geändert werden müssen, im aktuellen java 8 Die früheren Sammlungsframeworks hatten keine foreach-Methode, die übliche Lösung bestand darin, in JDK neue Methoden und Implementierungen für die betreffenden Schnittstellen hinzuzufügen. Allerdings ist es für bereits veröffentlichte Versionen nicht möglich, neue Methoden hinzuzufügen, ohne die bestehenden Implementierungen zu beeinträchtigen. Daher wurden Standardmethoden eingeführt. Ihr Ziel ist es, das Problem zu lösen, dass die Änderung der Schnittstelle nicht mit den bestehenden Implementierungen kompatibel ist.
Die Syntax der Standardmethoden ist wie folgt:
public interface Vehicle { default void print(){ System.out.println("Ich bin ein Fahrzeug!"); } }
Eine Schnittstelle hat eine Standardmethode, betrachten wir die folgende Situation, eine Klasse implementiert mehrere Schnittstellen, und diese Schnittstellen haben gleiche Standardmethoden, das folgende Beispiel zeigt die Lösung für diese Situation:
public interface Vehicle { default void print(){ System.out.println("Ich bin ein Fahrzeug!"); } } public interface FourWheeler { default void print(){ System.out.println("Ich bin ein Vierräderfahrzeug!"); } }
Eine erste Lösung besteht darin, eine eigene Standardmethode zu erstellen, um die Standardmethode der Schnittstelle zu überschreiben:
public class Car implements Vehicle, FourWheeler { default void print(){ System.out.println("Ich bin ein vier wheeled Auto!"); } }
Eine zweite Lösung besteht darin, super zu verwenden, um die Standardmethoden der angegebenen Schnittstelle aufzurufen:
public class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); } }
Java 8 Eine weitere Eigenschaft ist, dass eine Schnittstelle statische Methoden deklarieren (und implementieren) kann. Zum Beispiel:
public interface Vehicle { default void print(){ System.out.println("Ich bin ein Fahrzeug!"); } // Statische Methoden static void blowHorn(){ System.out.println("Pfeifen!!!"); } }
Wir können die folgenden Codezeilen verwenden, um die Verwendung von Standardmethoden zu verstehen, die in Java8In der Tester.java Datei:
public class Java8Tester { public static void main(String args[]){ Vehicle vehicle = new Car(); vehicle.print(); } } interface Vehicle { default void print(){ System.out.println("Ich bin ein Fahrzeug!"); } static void blowHorn(){ System.out.println("Pfeifen!!!"); } } interface FourWheeler { default void print(){ System.out.println("Ich bin ein Vierräderfahrzeug!"); } } class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); FourWheeler.super.print(); Vehicle.blowHorn(); System.out.println("Ich bin ein Auto!"); } }
Führen Sie das obige Skript aus, das Ergebnis der Ausgabe ist:
$ javac Java8Tester.java $ java Java8Tester Ich bin ein Fahrzeug! Ich bin ein Vierräderfahrzeug! Pfeifen!!! Ich bin ein Auto!