函數式接口
當然首先是一個接口,然後就是在這個接口裏面只能有一個抽象方法。
這種類型的接口也稱爲SAM接口,即Single Abstract Method interfaces。
如下:
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
@FunctionalInterface註解Java 8爲函數式接口引入了一個新註解@FunctionalInterface,主要用於編譯級錯誤檢查,加上該註解,當你寫的接口不符合函數式接口定義的時候,編譯器會報錯
Tips:加不加@FunctionalInterface對於接口是不是函數式接口沒有影響,該註解知識提醒編譯器去檢查該接口是否僅包含一個抽象方法
函數型接口只有一個抽象方法的接口,但是函數型接口可以包含以下方法
默認方法
函數式接口裏是可以包含默認方法,因爲默認方法不是抽象方法,其有一個默認實現,所以是符合函數式接口的定義的;
靜態方法
函數式接口裏是可以包含靜態方法,因爲靜態方法不能是抽象方法,是一個已經實現了的方法,所以是符合函數式接口的定義的;
如下代碼不會報錯:
Object裏的public方法
函數式接口裏是可以包含Object裏的public方法,這些方法對於函數式接口來說,不被當成是抽象方法(雖然它們是抽象方法);因爲任何一個函數式接口的實現,默認都繼承了Object類,包含了來自java.lang.Object裏對這些抽象方法的實現;
如下代碼不會報錯: