详解Java8接口中引入Default关键字的本质原因

娱乐2025-11-05 03:59:569

接口的详解常规实现方式

熟悉java接口的同学都知道,接口被某些类实现后,接口一旦在接口中增加了新方法,中引字那么实现该接口的关键所有类都要实现这个新增的方法(即使这个新增的接口对某些类没有用处)。

定义一个接口

public interface IDemo {     void func1(); } 

 类CDemo1实现接口IDemo

public class CDemo1 implements IDemo{     @Override     public void func1() {     } } 

类CDemo2实现接口IDemo

public class CDemo2 implements IDemo{     @Override     public void func1() {     } } 

 在IDemo中新增加方法func2()

public interface IDemo {     void func1();     void func2(); } 

 可以看到CDemo1和CDemo2中需要强制实现方法func2(),本质如下图所示:

接口中的原因default

上面的实例导致了前面提出的那个问题,一旦在接口中增加了新方法,详解那么已经实现了该接口的接口所有的类都要实现这个新增的方法!那么,如果是中引字JDK中的某个核心接口需要变更,源码下载需要新增某些方法呢?关键这个工作量更是可想而知,我们来看一下java.util.Collection这个接口,本质它在jdk1.7中的原因方法包括:

而在JDk 1.8中 Collection接口中包括方法如下:

其中新增的接口,都用default来修饰(jdk1.7升级到jdk1.8后,详解接口的接口重要变化),源代码如下:

default Stream<E> stream() {  return StreamSupport.stream(spliterator(),中引字 false); } default Stream<E> parallelStream() {     return StreamSupport.stream(spliterator(), true); } default Spliterator<E> spliterator() {     return Spliterators.spliterator(this, 0); } default boolean removeIf(Predicate<? super E> filter) {     Objects.requireNonNull(filter);     boolean removed = false;     final Iterator<E> each = iterator();     while (each.hasNext()) {         if (filter.test(each.next())) {             each.remove();             removed = true;         }     }     return removed; } 

 我们不仅大吃一惊,这还是我们熟知的接口吗?接口中的方法居然有了实现代码!吃惊过后,我们来想想作者的意图。还是上面的代码,我们新增方法func3(),并完成简单的b2b信息网实现

public interface IDemo {     void func1();     void func2();     default void func3(){         System.out.println("this is default func2");     } } 

 然后查看类CDemo1,一切正常,没有任何错误提示:

实例化CDemo1后,可以正常调用func3方法,代码如下:

public static void main(String[] args) {     CDemo1 cd1=new CDemo1();     cd1.func3(); } 

读到这里发现接口中通过default关键字来进行接口实现的好处了吧,简单四个字就是 “方便扩展” !通过这个技术可以做到在接口中新增加方法并且不会影响到已经实现了该接口的所有的类!包括jdk1.8新引入的Lambda表达式也是基于这一知识点来实现的!

接口中的static

与此同时,从jdk1.8开始,接口中可以通过static关键字来修饰方法,同样可以对方法进行实现

static  void func4(){     System.out.println("this is static func4"); } 

调用方法也非常的简单,接口.static 方法,例如:

IDemo.func4(); 

大家可以这样理解,接口中的亿华云计算static方法可以作为工具方法来提供给大家进行方便调用!

本文地址:http://www.bzuk.cn/html/263c30299434.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

电脑主板硬盘的分区教程(轻松学会电脑主板硬盘分区技巧)

蓝宝石6800显卡(探索蓝宝石6800显卡的强大特性与出色表现)

苹果3GS运行速度如何?(全面分析苹果3GS的运行速度表现)

360N4S音质评测——打造震撼音乐体验(揭秘360N4S的音效巅峰与细节呈现)

AOCI2779VH(探索无边界体验,颠覆传统视觉感受)

探索神舟g60e3s1的卓越表现(一部值得期待的超级笔记本电脑)

联想Y700游戏本体验报告(探索联想Y700游戏本的性能和功能)

以泼辣修图Win10如何为你的照片增添魅力?(颠覆传统修图方式,让你的照片更具个性)

友情链接

滇ICP备2023006006号-33