缺省方法(2)-Java中缺省方法会引入多重继承吗?

Java中缺省方法会引入多重继承吗?

不会,因为多重继承已经存在于Java中了。接口类型的多重继承从一开始一直是语言的一个特点。缺省方法确实引入了一种新的多重继承即多重继承行为。Java将依然不会有多重继承的状态,就像C++那样。

这里是多重继承行为的一个例子。新的接口java.util.Sized声明了方法size和sEmpty并提供了后者的默认实现:
   
public interface Sized { 
        public default boolean isEmpty() { 
            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的实现:
缺省方法(2)-Java中缺省方法会引入多重继承吗?
   
class SimpleCollection<T> implements Sized, Traversable<T> { 
        public Iterator<T> iterator() { ... } 
        public int size() { ... } 
    } 

然后,给定一个声明
   
SimpleCollection<String> sc = new SimpleCollection<>();


编译下面的语句:
Sized s = sc;                        // SimpleCollection是Sized的子类型 
    Traversable<String> t = sc;          // SimpleCollection是Traversable的子类型
    System.out.println(sc.isEmpty());    // isEmpty是来自Sized接口缺省实现
    sc.forEach(System.out::println);     // forEach是来自Traversable的缺省实现


原文链接:http://www.lambdafaq.org/do-default-methods-introduce-multiple-inheritance-to-java/

你可能感兴趣的:(java)