Java8新特性-默認方法

默認方法

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("按喇叭!!!");
   }
}

默認方法實例

我們可以通過以下代碼來了解關於默認方法的使用

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("我是一輛汽車!");
   }
}

執行以上腳本,輸出結果爲:

$ javac Java8Tester.java
$ java Java8Tester
我是一輛車!
我是一輛四輪車!
按喇叭!!!
我是一輛汽車!

其他新特性(持續更新中)

Java8新特性-Lambad表達式
Java8新特性-方法引用
Java8新特性-函數式接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章