接口的 default method , 多繼承

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,採用顯示調用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章