Java 8 默認方法
Java 8 新增了接口的默認方法。
簡單說,默認方法就是接口可以有實現(xiàn)方法,而且不需要實現(xiàn)類去實現(xiàn)其方法。
我們只需在方法名前面加個default關鍵字即可實現(xiàn)默認方法。
為什么要有這個特性?
首先,之前的接口是個雙刃劍,好處是面向抽象而不是面向具體編程,缺陷是,當需要修改接口時候,需要修改全部實現(xiàn)該接口的類,目前的java 8之前的集合框架沒有foreach方法,通常能想到的解決辦法是在JDK里給相關的接口添加新的方法及實現(xiàn)。然而,對于已經(jīng)發(fā)布的版本,是沒法在給接口添加新方法的同時不影響已有的實現(xiàn)。所以引進的默認方法。他們的目的是為了解決接口的修改與現(xiàn)有的實現(xiàn)不兼容的問題。
語法
默認方法語法格式如下:
public interface vehicle { default void print(){ System.out.println("我是一輛車!"); } }
多個默認方法
一個接口有默認方法,考慮這樣的情況,一個類實現(xiàn)了多個接口,且這些接口有相同的默認方法,以下實例說明了這種情況的解決方法:
public interface vehicle { default void print(){ System.out.println("我是一輛車!"); } } public interface fourWheeler { default void print(){ System.out.println("我是一輛四輪車!"); } }
第一個解決方案是創(chuàng)建自己的默認方法,來覆蓋重寫接口的默認方法:
public class car implements vehicle, fourWheeler { default void print(){ System.out.println("我是一輛四輪汽車!"); } }
第二種解決方案可以使用 super 來調(diào)用指定接口的默認方法:
public class car implements vehicle, fourWheeler { default void print(){ vehicle.super.print(); } }
靜態(tài)默認方法
Java 8 的另一個特性是接口可以聲明(并且可以提供實現(xiàn))靜態(tài)方法。例如:
public interface vehicle { default void print(){ System.out.println("我是一輛車!"); } // 靜態(tài)方法 static void blowHorn(){ System.out.println("按喇叭!!!"); } }
默認方法實例
我們可以通過以下代碼來了解關于默認方法的使用,可以將代碼放入 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("我是一輛車!"); } static void blowHorn(){ System.out.println("按喇叭!!!"); } } interface FourWheeler { default void print(){ System.out.println("我是一輛四輪車!"); } } class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); FourWheeler.super.print(); Vehicle.blowHorn(); System.out.println("我是一輛汽車!"); } }
執(zhí)行以上腳本,輸出結果為:
$ javac Java8Tester.java $ java Java8Tester 我是一輛車! 我是一輛四輪車! 按喇叭!!! 我是一輛汽車!
更多建議: