1. 程式人生 > >jdk1.8的介面中default修飾的方法

jdk1.8的介面中default修飾的方法

我用的的是jdk1.8,某次在編寫某個類實現listener介面的時候,發現ide沒有提示實現介面的方法,有點迷就去介面原始碼去看了一下,看到接口裡的方法竟然可以定義為default型別,加了一個default關鍵字修飾方法,就去百度查看了一下這個default關鍵字究竟有什麼含義,原來是jdk1.8的介面新特性

我們都知道接口裡的變數預設隱含型別是public static final,也是就是說是常量。而方法預設型別是public abstract,所以介面的方法都是抽象方法,但是事實真的是這樣嗎?

(1)增加default方法。對已有的介面,如果想對介面增加一個新方法,那麼需要對實現該介面的所有類進行修改,如果介面實的現類很多,就會帶來很大的工作量,而且還很容易破壞以前的程式碼,帶來一些問題。如果把新的方法定義為default方法,就可以避免對其他實現類的修改。
但是,這樣也會有一個問題:如果介面A和介面B裡有一個名字相同並且引數列表也相同的方法都被定義為了default方法,那麼當類C實現介面A和介面B的時候就會在編譯時報錯。由於是編譯時報錯,這個完全可以接受,當類C成功實現了
介面A和介面B以後(沒有衝突),類C的例項就可以呼叫介面A和介面B裡的default方法了。


(2)新增了static函式。static修飾的方法也是非抽象方法,有自己的方法體,在介面中定義一個靜態方法,該方法可以直接用< 介面名.方法名() >的形式來呼叫。相當於呼叫類的靜態方法一樣,給方法的呼叫帶來了方便。