Java8新特性之接口的默認方法(Default Methods for Interfaces)

Java 8使我們能夠通過使用 default 關鍵字向接口添加非抽象方法實現。 此功能也稱爲虛擬擴展方法

第一個例子:

interface Formula{

    double calculate(int a);

    default double sqrt(int a) {
        return Math.sqrt(a);
    }

}

Formula 接口中除了抽象方法計算接口公式還定義了默認方法 sqrt。 實現該接口的類只需要實現抽象方法 calculate。 默認方法sqrt 可以直接使用。當然你也可以直接通過接口創建對象,然後實現接口中的默認方法就可以了,我們通過代碼演示一下這種方式。

public class Main {

  public static void main(String[] args) {
    // 通過匿名內部類方式訪問接口
    Formula formula = new Formula() {
        @Override
        public double calculate(int a) {
            return sqrt(a * 100);
        }
    };

    System.out.println(formula.calculate(100));     // 100.0
    System.out.println(formula.sqrt(16));           // 4.0

  }

}

formula 是作爲匿名對象實現的。該代碼非常容易理解,6行代碼實現了計算 sqrt(a * 100)。在 Java 8 中實現單個方法對象有一種更好更方便的方法–Lambda expressions。

注: 不管是抽象類還是接口,都可以通過匿名內部類的方式訪問。不能通過抽象類或者接口直接創建對象。對於上面通過匿名內部類方式訪問接口,我們可以這樣理解:一個內部類實現了接口裏的抽象方法並且返回一個內部類對象,之後我們讓接口的引用來指向這個對象。

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