1、什麼是預設方法?
1.Java 8 的新特性
2.預設方法就是接口可以有實作方法,而且不需要實作類去實作其方法。
3.我們隻需在方法名前面加個 default 關鍵字即可實作預設方法。
4.隻能用在接口中
5.預設方法優于抽象方法
2、為什麼需要預設方法?
1.舉一個很現實的例子:
我們的接口老早就寫好了,後面因為各種業務問題,避免不了要修改接口。
在 Java 8 之前,比如要在一個接口中添加一個抽象方法,那所有的接口實作類都要去實作這個方法,不然就會編譯錯誤,而某些實作類根本就不需要實作這個方法也被迫要寫一個空實作,改動會非常大。
是以,接口預設方法就是為了解決這個問題,隻要在一個接口添加了一個預設方法,所有的實作類就自動繼承,不需要改動任何實作類,也不會影響業務。
另外,接口預設方法可以被接口實作類重寫。
擴充:靜态方法
1.因為接口預設方法可以被繼承并重寫,如果一個類實作(或一個接口繼承)的多個接口都存在相同的預設方法,那就存在沖突問題。
【沖突的結局方案】
解決接口default方法沖突的三步驟:
i.方法簽名相同時,才表示出現了沖突。
ii.類中的方法優先級最高。類或者父類中的方法實作優先級大于任何接口的預設方法
iii.其實,子接口的預設方法優先級更高。
iv.若最終還是無法判斷,那麼實作類必須通過顯示複寫的方式複寫預設方法,然後再自己通過xxx.super.xxx()的方式來指定具體使用哪個接口的實作
2.靜态方法用 static 修飾
3.靜态方法可以節省記憶體
4.在接口内的靜态方法是不可以被重寫的