1.什麼是default method?
interface 中的default method就是一個具體方法。在擴展接口時,爲了滿足向後兼容,採用default method。
比如,List接口中的sort方法:
default void sort(Comparator<? super E> c){
Collections.sort(this, c);
}
方法的調用
再比如,Collection裏的stream:
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
2.幫助擴展接口的同時,並不會影響接口的使用者
如果接口中添加的是default method,接口的實現類可以將它覆蓋。如果不覆蓋,也不會報錯。
接口裏添加了新的抽象方法,實現類沒編譯的話,可以正常運行。一旦重新編譯,就會包抽象方法沒被實現的錯
Different types of compatibilities: binary, source, and behavioral
3.default method 的用法
default method可以作爲默認的一種實現。多繼承。
4.多繼承的衝突
一個類可以實現多個接口;這些多個接口可能有一個相同簽名的方法。那麼就會產生衝突。面對衝突,我們有三個規則來解決它。
- 如果同時有類繼承下來的方法,優先類來的方法
- 採用繼承鏈上,離接口實現類最近的那個接口的default method
- 如果以上都不滿足,實現類需要覆蓋接口的default method,採用顯示調用