返回顶部
首页 > 资讯 > 精选 >Java8接口中引入default关键字的本质原因是什么
  • 478
分享到

Java8接口中引入default关键字的本质原因是什么

2023-06-26 03:06:42 478人浏览 八月长安
摘要

Java8接口中引入default关键字的本质原因是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。接口的常规实现方式熟悉java接口的同学都知道,接口被某些类实现后,一

Java8接口中引入default关键字的本质原因是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

接口的常规实现方式

熟悉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(),如下图所示:

Java8接口中引入default关键字的本质原因是什么

接口中的default

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

Java8接口中引入default关键字的本质原因是什么

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

Java8接口中引入default关键字的本质原因是什么

其中新增的接口,都用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(),并完成简单的实现

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

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

Java8接口中引入default关键字的本质原因是什么

实例化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方法可以作为工具方法来提供给大家进行方便调用!

Default好处

原先接口的缺陷是,修改接口后,则需要修改全部实现该接口的类,所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。

关于Java8接口中引入default关键字的本质原因是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: Java8接口中引入default关键字的本质原因是什么

本文链接: https://lsjlt.com/news/306480.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java8接口中引入default关键字的本质原因是什么
    Java8接口中引入default关键字的本质原因是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。接口的常规实现方式熟悉java接口的同学都知道,接口被某些类实现后,一...
    99+
    2023-06-26
  • Java8接口中引入default关键字的本质原因详析
    目录接口的常规实现方式接口中的default接口中的staticDefault好处总结接口的常规实现方式 熟悉java接口的同学都知道,接口被某些类实现后,一旦在接口中增加了新方法,...
    99+
    2024-04-02
  • Oracle中关于外键缺少索引的原因是什么
    本篇内容介绍了“Oracle中关于外键缺少索引的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在...
    99+
    2024-04-02
  • 什么是mysql中唯一索引的关键字
    本篇文章为大家展示了什么是mysql中唯一索引的关键字,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。mysql中唯一索引的关键字是unique index。创建唯一...
    99+
    2024-04-02
  • Vue中动态引入图片要require的原因是什么
    这篇“Vue中动态引入图片要require的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中动态引入图片要r...
    99+
    2023-07-04
  • Go 语言中的索引接口与 NumPy 的关系是什么?
    随着人工智能和大数据时代的到来,数据处理和数据分析变得越来越重要。而在数据处理和数据分析中,数组是最基础、最常用的数据结构之一。在 Python 中,NumPy 库提供了强大的数组处理和科学计算功能,而在 Go 语言中,数组也是一种重要的...
    99+
    2023-06-29
    索引 接口 numy
  • 在solaris 中套接字错误EINPROGRESS 的可能原因是什么
    在Solaris中,套接字错误EINPROGRESS表示连接正在进行中。这通常发生在非阻塞套接字上,并且在尝试建立连接时返回。可能的...
    99+
    2023-09-27
    solaris
  • 关键字 var 后面的下划线和接口名称是什么意思?
    在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天编程网就整理分享《关键字 var 后面的下划线和接口名称是什...
    99+
    2024-04-05
  • 不要在PHP接口URL中添加后缀的原因是什么
    这篇文章主要介绍了不要在PHP接口URL中添加后缀的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇不要在PHP接口URL中添加后缀的原因是什么文章都会有所收获,下面我们一起来看看吧。为什么不要在PHP...
    99+
    2023-07-05
  • 网站开发中关键词突然下降的原因与解决方法是什么
    这篇文章将为大家详细讲解有关网站开发中关键词突然下降的原因与解决方法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。针对关键词排名突然下降或者消失,一般会有两种情况。  第一种:个别目标...
    99+
    2023-06-10
  • [正式学习java③]——字符串在内存中的存储方式、为什么字符串不可变、字符串的拼接原理,键盘录入的小细节。
    🌈键盘敲烂,年薪30万🌈 目录 一、字符串 1.字符串在内存中的存储方式 2.创建字符串对象的两种方式 3.两种创建方式的区别 4.字符串对象一旦创建不可改变 - 为什么??? 5.字符串的拼接 6....
    99+
    2023-10-21
    学习 java 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作