JAVA8已经发布很久,是自java5(2004年发布)之后Oracle发布的最重要的一个版本。其中包括语言、编译器、库、工具和JVM等诸多方面的新特性,对于国内外互联网公司来说,Java8是以后技术开发的趋势。这里主要讲解在开发中几个核心的新特性。(主要从新特性概念解释、语法定义、简单代码演示、优缺点分析、项目实战几个方面编写)。

一、核心特性一览

上图中的这6项就是Java8的核心特性,小乐会给大家一一阐述,欢迎关注!今天要讲述的是第一个核心特性-接口默认方法。(原创作品,转载请注明出处和作者)

二、接口默认方法

在注册网站时,我们会在注册后使用网站提供的默认头像,应用程序安装成功后通常会提供默认图标,在电商网站购买过商品进行支付时,我们会设置常用收货地址为默认地址,看起来生活中很多场景都有默认一说。Java8 开始,同样也有默认这个词的出现,这里针对接口Java8扩展了接口原有功能,并对默认方法提供支持。

1、概念

从Java8开始,程序允许在接口中包含带有具体实现的方法,使用default修饰,这类方法就是默认方法。默认方法在接口中可以添加多个,并且Java8提供了很多对应的接口默认方法。

2、语法

Java8中接口可以包含实现方法,需要使用default修饰,此类方法称为默认方法。默认方法在接口中必须提供实现,在实现类中可以按需重写。默认方法只能在实现类中或通过实现类对象调用。如下形式:

public 

3、简单使用

  • 接口定义
    定义IMathOperation 接口 并提供默认打印方法
public 

  • 子类实现
    定义MathOperationImpl子类 实现IMathOperation 接口

子类在实现时,按需重写接口默认方法

public 

三、多个默认方法

使用Java8开发应用程序,子类实现多个接口时,对于接口默认方法定义允许定义多个默认方法,并且接口默认方法可能会出现同名情况,此时对于子类在实现或者调用时通常遵循以下原则:

1.类中的方法优先级最高

2.如果第一条无法进行判断,那么子接口的优先级更高:函数签名相同时,优先选择拥有最具体实现的默认方法的接口,即如果B继承了A,那么B就比A更加具体

示例代码如下:

/**

四、接口静态方法

接口中除了允许定义多个默认方法之外,Java8也允许在接口中定义多个静态方法,静态方法即通过static 修饰的方法。接口中静态方法也必须提供实现,提供了可以直接通过接口调用方法的方式。

public 

接口中的静态方法只能通过接口本身去调用,类似于 Class 中的静态方法,不存在默认方法中的多继承问题,静态方法并不能在实现类中被覆写,实现类中可以声明相同的方法,但这两个方法之间除了名字相同,并没有 Override 关系。

五、接口默认方法实战

1、网站活跃TOP3用户遍历

这里以博客网站举例,比如统计每个月网站前三活跃用户(按用户文章发表量评判),使用集合遍历操作来使用接口默认方法,对于测试数据如下:

uList

  • 增强for实现

得到统计集合数据后,最简单的方式使用增强for实现,也是java8之前常用的方式。

System

  • 自定义接口默认方法
/**

  • 使用增强的Iterable接口默认方法
System

2、网站活跃TOP3用户排序

这里以博客网站举例,比如统计每个月网站前三活跃用户(按用户文章发表量评判),使用集合排序操作来使用接口默认方法,对于测试数据如下:

  • Collections.sort 工具类方法实现排序
System

  • 增强的List接口默认sort方法
    借助Java8增强的List接口默认Sort方法实现集合排序操作
System

  • Stream流sorted 方法实现排序(这里先做了解!)
    Stream流提供了针对集合的多种操作,这里借助Stream的sorted实现集合元素排序操作,后续会对Stream做详细介绍。
System

六、接口默认方法与静态方法的优势

  • 接口的兼容性得到解决
    使用接口编程的好处是,开发是面向抽象而不再是面向具体来编程,使得程序变得很灵活,缺陷是,当需要修改接口时候,此时对应实现该接口的类需要全部修改,举个例子, java 8 之前对于我们常用的集合框架没有 foreach 方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。从Java8开始,引入了接口默认方法,这样的好处也是很明显的,首先解决了Java8以前版本接口兼容性问题,同时对于我们以后的程序开发,也可以在接口子类中直接使用接口默认方法,而不再需要再各个子类中各自实现响应接口方法。
  • 子类在实现接口方法时灵活度更高
    子类在实现接口时,可以按需重写,不在向Java8以前接口方法必须全部实现,同时接口默认方法可以在子类中直接进行调用,灵活度比较高。
  • 开发中避免大量工具类创建
    接口中引入静态方法,对于原有项目开发中出现大量的工具类大量静态方法的代码便可以迁移到接口中定义与实现,省去大量工具类的创建。
  • 提升了对Lambda表达式的支持
    Lambda 是针对只有一个抽象方法的接口来说的,接口中引入接口默认方法与静态方法,在对接口这些方法进行调用时,可以引入Lambda表达式简化了原有代码的书写形式,使得代码变得更加简洁。

idea重写接口没有@override_乐字节|Java8核心实战-接口默认方法相关推荐

  1. optional判断是否为空_乐字节Java8核心特性之Optional

    小伙伴们,上次小乐给大家详细介绍了Java8核心特性的Stream(流),点击可以回顾哦. 乐字节:乐字节Java8核心特性实战-Stream流​zhuanlan.zhihu.com Optional ...

  2. java8新特性_乐字节-Java8新特性-接口默认方法

    总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...

  3. java过滤4字节_乐字节Java8核心特性实战之四:方法引用

    Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法. 方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的 ...

  4. 【java8新特性】——默认方法(五)

    一.简介 默认方法是指接口的默认方法,它是java8的新特性之一.顾名思义,默认方法就是接口提供一个默认实现,且不强制实现类去覆写的方法.默认方法用default关键字来修饰. 默认方法可以解决的痛点 ...

  5. java8新特性_乐字节-Java8新特性-函数式接口

    上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...

  6. java stream byte_乐字节-Java8新特性之Stream流(上)

    上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...

  7. 30分钟入门Java8之默认方法和静态接口方法

    2019独角兽企业重金招聘Python工程师标准>>> 30分钟入门Java8之默认方法和静态接口方法 作者:@JohnTsai 本文为作者原创,转载请注明出处:http://www ...

  8. Java8新特性-接口中的静态方法与默认方法

    今天上午在读<Effective Java>时,有这样一句话:"接口中"不能有静态方法,于是联想起面试时老是被问接口相关的东西,决定总结一下,谁知道这一总结,就发现了自 ...

  9. Java8新特性Optional、接口中的默认方法与静态方法

    Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...

最新文章

  1. python 调用api上传物流信息,python实现快递鸟API物流查询接口 数据签名方法
  2. 140个Google面试问题
  3. Bat_To_Exe_Converter 乱码 中文
  4. zabbix_get 命令介绍
  5. 揭秘:高盛交易员赚取10亿美元利润的神秘“利器”终于公开了
  6. excel实战应用案例100讲(五)-excel实现南丁格尔玫瑰图制作
  7. centos7 安装 php-fpm_centos7中如何安装 php-fpm(nginx)
  8. python修改第三方库重写_python安装第三方库时的一些bug 镜像源修改
  9. android 隐私空间,不想用隐私空间?安卓用户原来还可以这样隐藏手机秘密
  10. SpringCloud工作笔记037---spring cloud-zuul的Filter详解
  11. shopnc框架数据库查询限制30条记录
  12. solr的简单使用说明
  13. [答案解析]华工数电实验:简易交通灯控制电路的设计
  14. 堆排序算法——C/C++
  15. iOS开发之企业开发者账号打包发布 App 到服务器上的流程
  16. 光E电4个必懂的理财基础知识
  17. 在 Windows10 系统下重新安装 Ubuntu22.04 系统
  18. 全国产!全志A40i+Logos FPGA核心板(4核ARM Cortex-A7)硬件说明
  19. BUUCTF-MRCTF2020
  20. Josephus问题(最后一个退出的人)

热门文章

  1. 力扣算法题—074搜索二维矩阵
  2. Java多线程——重入锁ReentrantLock源码阅读
  3. 5G更大的发展在于产业应用
  4. 如何实现两列等高效果?
  5. Spring4.2+quartz2.2集群
  6. Android -- 自定义ScrollView实现放大回弹效果
  7. android 上线流程
  8. mysql hex2bin_mysqlbinlog指令
  9. 理论基础 —— 排序 —— 逆序对问题
  10. 图像模糊处理(信息学奥赛一本通-T1128)