Lambda FAQ_14.默认方法是否给Java引入了多重继承

本文探讨了Java中默认方法引入的行为多继承概念,通过具体例子展示了如何使用新接口来实现方法的默认实现,并说明了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);

原文地址


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值