考慮一下你開發的名爲DoIt
的接口:程序員
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); }
假設稍後你要向DoIt
添加第三個方法,這樣如今接口變爲:segmentfault
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); boolean didItWork(int i, double x, String s); }
若是進行此更改,那麼實現舊DoIt
接口的全部類都將中斷,由於它們再也不實現舊接口,依賴此接口的程序員將大聲抗議。code
嘗試預測接口的全部用途,並從一開始就徹底指定它,若是要向接口添加其餘方法,能夠使用多個選項,你能夠建立一個擴展DoIt
的DoItPlus
接口:接口
public interface DoItPlus extends DoIt { boolean didItWork(int i, double x, String s); }
如今,你的代碼用戶能夠選擇繼續使用舊接口或升級到新接口。開發
或者,你能夠將新方法定義爲默認方法,如下示例定義名爲didItWork
的默認方法:get
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); default boolean didItWork(int i, double x, String s) { // Method body } }
請注意,你必須提供默認方法的實現,你還能夠爲現有接口定義新的靜態方法,具備實現使用新的默認或靜態方法加強的接口的類的用戶沒必要修改或從新編譯它們以適應額外方法。編譯