默认方法是否给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>并且实现了方法 iterator和 size:
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);

本文探讨了Java中默认方法引入的行为多继承概念,通过具体例子展示了如何使用新接口来实现方法的默认实现,并说明了Java在类继承上的限制。

被折叠的 条评论
为什么被折叠?



