1. 程式人生 > 其它 >Java 8 新增了介面的預設方法

Java 8 新增了介面的預設方法

Java 8 新增了介面的預設方法。

簡單說,預設方法就是介面可以有實現方法,而且不需要實現類去實現其方法。

我們只需在方法名前面加個 default 關鍵字即可實現預設方法。

為什麼要有這個特性?

首先,之前的介面是個雙刃劍,好處是面向抽象而不是面向具體程式設計,缺陷是,當需要修改介面時候,需要修改全部實現該介面的類,目前的 java 8 之前的集合框架沒有 foreach 方法,通常能想到的解決辦法是在JDK裡給相關的介面新增新的方法及實現。然而,對於已經發布的版本,是沒法在給介面新增新方法的同時不影響已有的實現。所以引進的預設方法。他們的目的是為了解決介面的修改與現有的實現不相容的問題。

語法

預設方法語法格式如下:

public interface Vehicle { default void print(){ System.out.println("我是一輛車!"); } }

多個預設方法

一個介面有預設方法,考慮這樣的情況,一個類實現了多個介面,且這些介面有相同的預設方法,以下例項說明了這種情況的解決方法:

public interface Vehicle { default void print(){ System.out.println("我是一輛車!"); } } public interface FourWheeler { default void print(){ System.out.println("我是一輛四輪車!"); } }

第一個解決方案是建立自己的預設方法,來覆蓋重寫介面的預設方法:

public class Car implements Vehicle, FourWheeler { default void print(){ System.out.println("我是一輛四輪汽車!"); } }

第二種解決方案可以使用 super 來呼叫指定介面的預設方法:

public class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print(); } }

靜態預設方法

Java 8 的另一個特性是介面可以宣告(並且可以提供實現)靜態方法。例如:

public interface Vehicle { default void print(){ System.out.println("我是一輛車!"); } // 靜態方法 static void blowHorn(){ System.out.println("按喇叭!!!"); } }