一. 默認方法java
1.默認方法的使用模式:ide
-- 可選方法函數
類實現了接口,可是刻意地將一些方法留白。spa
public interface Iterator<E> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } }
-- 行爲的多繼承繼承
讓類從多個來源重用代碼。接口
-- 繼承多個接口;rem
-- 利用正交方法的精簡接口:get
public interface Resizable { int getWidth(); int getHeight(); void setWidth(int width); void setHeight(int height); void setAbsoluteSize(int width, int height); default void setRelativeSize(int wFactor, int hFactor) { setAbsoluteSize(getWidth() / wFactor, getHeight() / hFactor); } }
2.解決衝突的規則it
衝突的場景:一個類實現了多個接口和父類的方法而它們使用的倒是一樣的函數簽名。io
規則:
(1)類中的方法優先級最高。類或父類中聲明的方法優先級高於任何聲明爲默認方法的優先級。
(2)若是沒法依據第一條進行判斷,那麼子接口的優先級更高:函數簽名相同時,優先級選擇擁有最具體實現的默認方法的接口,若是B繼承了A,那麼B就比A更具體。
(3)最後,若是仍是沒法判斷,繼承了多個接口的類必須經過顯式覆蓋和調用指望的方法,顯式地選擇使用哪個默認方法的實現。(X.super().method(...))