Java8默認方法

Java8引入的接口默認方法實現一個新的概念。此功能是爲了向後兼容性增加,使舊接口可用於利用JAVA8。 lambda表達式的能力,例如,列表或集合接口不具備forEach方法聲明。從而增加了這樣的方法只會打破收集框架實現。 Java8引入了默認的方法使列表/Collection接口可以擁有forEach默認方法,並實行類實現這些接口不需要實現相同功能。

語法

public interface vehicle { default void print(){ System.out.println("I am a vehicle!"); } }

多重默認

在接口默認方法,它們是一類實現兩個接口使用相同的默認方法,那麼如何解決這種模糊性。考慮下面的情況。

public interface vehicle { default void print(){ System.out.println("I am a vehicle!"); } } public interface fourWheeler { default void print(){ System.out.println("I am a four wheeler!"); } }

第一個解決方案是創建一個自己的方法,並覆蓋默認實現。

public class car implements vehicle, fourWheeler { default void print(){ System.out.println("I am a four wheeler car vehicle!"); } }

第二個解決方法是調用使用超指定接口的默認方法。

public class car implements vehicle, fourWheeler { default void print(){ vehicle.super.print(); } }

靜態默認方法

現在,從Java8起接口也可以有靜態輔助方法。

public interface vehicle { default void print(){ System.out.println("I am a vehicle!"); } static void blowHorn(){ System.out.println("Blowing horn!!!"); } }

默認方法示例

使用所選擇的任何編輯器創建下面的java程序 C:/> JAVA

Java8Tester.java

public class Java8Tester { public static void main(String args[]){ Vehicle vehicle = new Car(); vehicle.print(); } } interface Vehicle { default void print(){ System.out.println("I am a vehicle!"); } static void blowHorn(){ System.out.println("Blowing horn!!!"); } } interface FourWheeler { default void print(){ System.out.println("I am a four wheeler!"); } } class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); FourWheeler.super.print(); Vehicle.blowHorn(); System.out.println("I am a car!"); } }

驗證結果

使用javac編譯器編譯如下類

C:\JAVA>javac Java8Tester.java

現在運行Java8Tester看到的結果

C:\JAVA>java Java8Tester

看到結果。

I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!