Java8引入的接口默認(rèn)方法實(shí)現(xiàn)一個(gè)新的概念。此功能是為了向后兼容性增加,使舊接口可用于利用JAVA8。 lambda表達(dá)式的能力,例如,列表或集合接口不具備forEach方法聲明。從而增加了這樣的方法只會打破收集框架實(shí)現(xiàn)。 Java8引入了默認(rèn)的方法使列表/Collection接口可以擁有forEach默認(rèn)方法,并實(shí)行類實(shí)現(xiàn)這些接口不需要實(shí)現(xiàn)相同功能。
public interface vehicle { default void print(){ System.out.println("I am a vehicle!"); } }
在接口默認(rèn)方法,它們是一類實(shí)現(xiàn)兩個(gè)接口使用相同的默認(rèn)方法,那么如何解決這種模糊性??紤]下面的情況。
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!"); } }
第一個(gè)解決方案是創(chuàng)建一個(gè)自己的方法,并覆蓋默認(rèn)實(shí)現(xiàn)。
public class car implements vehicle, fourWheeler { default void print(){ System.out.println("I am a four wheeler car vehicle!"); } }
第二個(gè)解決方法是調(diào)用使用超指定接口的默認(rèn)方法。
public class car implements vehicle, fourWheeler { default void print(){ vehicle.super.print(); } }
現(xiàn)在,從Java8起接口也可以有靜態(tài)輔助方法。
public interface vehicle { default void print(){ System.out.println("I am a vehicle!"); } static void blowHorn(){ System.out.println("Blowing horn!!!"); } }
使用所選擇的任何編輯器創(chuàng)建下面的java程序 C:/> JAVA
Java8Tester.javapublic 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
現(xiàn)在運(yùn)行Java8Tester看到的結(jié)果
C:\JAVA>java Java8Tester
看到結(jié)果。
I am a vehicle! I am a four wheeler! Blowing horn!!! I am a car!