缺省方法(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的实现:
[img]http://www.lambdafaq.org/wp-content/uploads/MultipleInheritanceWithMethods.png[/img]
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/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值