Java學習隨筆(函式式介面)

RE_Serendipity發表於2020-11-09

函式式介面(Functional Interface)是Java8引入的一個新特性,是一種特殊的介面:SAM型別介面(Single Abstract Method),但本質上還是介面。
函式式介面就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的介面。

函式式介面可以被隱式轉換為Lambda表示式。

只要介面中出現多個抽象方法,那麼就不能稱之為函式式介面,執行時會編譯錯誤。為此,Java8提供了一個新的註解@FunctionalInterface,如果介面被這個註解標註,就說明該介面是函式式介面,如果有多於一個抽象方法,在編譯時就會報錯。但是這個註解不是必需的,只要介面符合函式式介面的定義,那麼這個介面就是函式式介面。

一般而言,函式式介面有且只有一個抽象方法,但是在Java8之後,介面也是可以定義方法的:預設方法default和靜態方法static,這兩種方法的定義不會影響函式式介面的定義。即:

  • 介面中可以有一個或多個靜態方法。
  • 在Java8之後,介面可以定義由default修飾的預設方法。
  • 可以有頂級父類Objectpublic型別的覆蓋方法。比如覆蓋父類中的:equalstoString等方法。
  • 函式式介面也支援繼承,可以繼承多個父類介面,但是每個父介面只能有一個抽象方法且必須是相同的抽象方法。

相關文章