Lambda FAQ_14.默認方法是否給Java引入了多重繼承

默認方法是否給Java引入了多重繼承?


當然不是,因爲Java中已經有了多重繼承。在語言最開始就有接口類型的多繼承特性。默認方式確實引入了一種新的多繼承方式,稱之爲行爲多繼承。Java仍然沒有類似C++中的狀態多繼承。


下面是一個行爲多繼承的例子。java.util.Sized這個新接口生命了size和isEmpty兩個方法,並且爲後者提供了默認實現:

public interface Sized{
    public default boolean isEmtpy(){
        return size() == 0;
    }
    public int size();
}

java.util.Traversable<T>這個新接口生命了方法forEach並且提供了默認實現:
public interface Traversable<T>{
    public default void forEach(Block<? super T> block){
        for(T t : this){
            block.apply(t);
        }
    }
}

假設我們現在聲明類SimpleCollection<T>並且實現了方法iteratorsize:

class SimpleCollection<T> implements Sized, Traversable<T> { 
    public Iterator<T> iterator() { ... } 
    public int size() { ... } 
} 

那麼,如下聲明:
SimpleCollection<String> sc = new SimpleCollection<>();

下面的語句都可以通過編譯:
Sized s = sc;
Traversable<String> t = sc;
System.out.println(sc.isEmpty());
sc.forEach(System.out::println);

原文地址


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章