Java8學習筆記(四)--接口加強

加強點

靜態方法

public interface InterfacePlus {
    void run();
    static Date createDate(){
        return new Date();
    }
}

默認方法

public interface InterfacePlus {
    void run();
    default void sayHello()
    {
        System.out.println("Hello Java8!");
    }
}

其餘

第一節開篇就說過,Java8採用註解@FunctionalInterface來保證接口爲函數接口,即接口中只顯式聲明一個抽象方法,新增的靜態方法和默認方法是否會影響其成爲一個函數接口呢,並不會,緣由是:靜態方法和默認方法均爲非抽象方法!
同理,複寫父類的非抽象方法也不影響其成爲一個函數接口,如複寫equals方法,以下圖所示:
html

測試

靜態方法測試

靜態方法能夠直接用接口來調用。java

Date date = InterfacePlus.createDate();
    System.out.println(date);

默認方法測試

非抽象的方法實現,只須要使用 default 關鍵字便可,這個特徵又叫作擴展方法。在實現該接口時,該默認擴展方法在子類上能夠直接使用,它的使用方式相似於抽象類中非抽象成員方法。函數

/*自行實現後可直接調用default方法*/
        //子類實例化
        InterfacePlusImpl interfacePlusImpl = new InterfacePlusImpl();
        interfacePlusImpl.sayHello();
        //Lambda實例化
        InterfacePlus interfacePlus = System.out::println;
        interfacePlus.sayHello();

但擴展方法不可以重載 Object 中的方法。例如:toString、equals、 hashCode 不能在接口中被重載。
測試

參考

  1. Java 8 新特性概述
相關文章
相關標籤/搜索