java8中对接口功能进行了增强,添加了以下两个需要自己实现的方法:
使用default关键字修饰,需要注意以下几点:
1.不能重写基类Object中的public方法
2.类优先原则:如果父类中有跟接口默认方法相同签名的方法,则使用父类中的方法。
3.需手动解决接口冲突:当接口A个接口B有相同签名的默认方法时,则实现类需要自己重写该方法。
使用方式跟类一样,直接通过接口名进行调用,但需要注意的是:接口中的静态方法是不能继承的
个人觉得是为了兼容JDK1.8之前的版本,在扩展已有接口的同时而不会影响他的实现类,就如Collection接口。试想,如果没有默认方法的话,我们要给所有集合类添加stream()方法是多么麻烦,相当于要给每个子类都实现这么个stream()方法。
机智的你可能会马上想到用下面的适配器来进行兼容,这样做虽然可以避免影响已有的子类,但用起来却很麻烦,需要给每处代码都加这么一句适配。
public class CollectionAdapter<E> {
private Collection<E> collection;
public CollectionAdapter(Collection<E> collection) {
this.collection = collection;
}
public Spliterator<E> spliterator() {
return Spliterators.spliterator(collection, 0);
}
public Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
}
另注:IDEA不鼓励使用实例去调用静态方法,所以coding的时候,实例名点“.”的时候并不会提示出静态方法,需要自己全拼才能显示,而不是实例不能调用静态方法。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/y_k_y/article/details/84609200
内容来源于网络,如有侵权,请联系作者删除!