一、简介

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

默认方法可以解决的痛点:
在java8之前,修改接口功能通常会给接口添加新的方法,这时对已经实现该接口的所有实现类,都要一一添加对新方法的实现,换言之,在给接口定义新方法的同时无法不影响到已有的实现类,这时,java8的默认方法特性就可以解决这种接口修改与已有实现类不兼容的问题,比如java8中Iterable接口添加的forEach方法就是一个默认方法:

    default void forEach(Consumer<? super T> action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}}

这样在java8中,可以对集合直接用forEach方法结合lambda表达式方便的实现集合的遍历计算。

二、默认方法的使用

2.1 实现多个接口有相同默认方法的解决

注意:当一个类实现多个接口时,若多个接口中存在相同默认方法(方法名、参数、返回值相同),此时实现类必须要覆写默认方法。

覆写有两种方式:

  • 1、实现类自己实现方法逻辑
  • 2、采用super关键字来调用指定接口的默认方法, 如:
public interface TestInterface1
{default void test(){System.out.println("TestInterface1");}
}public interface TestInterface2
{default void test(){System.out.println("TestInterface2");}
}public class Test implements TestInterface1, TestInterface2
{@Overridepublic void test(){// 调用TestInterface1接口的默认test()方法TestInterface1.super.test();}
}

2.2 接口静态方法

java8支持接口中定义静态方法(需要提供默认实现),写法上将默认方法的default关键字换成static关键字即可。

三、总结

java8默认方法的使用还是比较简单的,且解决了java8之前给接口定义新方法的同时无法不影响到已有的实现类的痛点问题,比较实用。


  • 【java8新特性】——lambda表达式与函数式接口详解(一)

  • 【java8新特性】——Stream API详解(二)

  • 【java8新特性】——Optional详解(三)

  • 【java8新特性】——方法引用(四)

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

【java8新特性】——默认方法(五)相关推荐

  1. 【java8新特性】——方法引用(四)

    一.简介 方法引用是java8的新特性之一, 可以直接引用已有Java类或对象的方法或构造器.方法引用与lambda表达式结合使用,可以进一步简化代码. 来看一段简单代码: public static ...

  2. 切克闹!Java8新特性之方法引用

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

  3. Java8新特性 - 04 - 方法引用05 - 方式四 【类名::new】

    1.类名::new 1.将Lambda表达式 替换为 [类名::new] 的写法. 2.确保 [类的构造方法] 的 参数与返回值 和 Lambda表达式的一致! * 分析 : 匿名内部类的方式 : 正 ...

  4. Java8新特性:(五)Supplier简介

    1.Supplier简介 Supplier是Java8配合Lambda表达式和函数式接口编程组合使用的一个接口,对外表现为 :: 接口Supplier<T> 最适合表示工厂.带有Suppl ...

  5. 小司机带你用Java8新特性之方法引用

    基于网上千篇一律的xxx.forEach(System.out::println)示例,不利于初学者理解, 所以小编自己撸了两个示例: 以下代码: package com.demo.java8;pub ...

  6. java 7 异常新特性_Java7的异常处理新特性-addSuppressed()方法等

    开发人员对异常处理的try-catch-finally语句块都比较熟悉.如果在try语句块中抛出了异常,在控制权转移到调用栈上一层代码之前,finally语句块中的语句也会执行.但是finally语句 ...

  7. 【java8新特性】——Optional详解(三)

    一.简介 Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,使用Optional类可以避免显式的null ...

  8. 【java8新特性】——Stream API详解(二)

    一.简介 java8新添加了一个特性:流Stream.Stream让开发者能够以一种声明的方式处理数据源(集合.数组等),它专注于对数据源进行各种高效的聚合操作(aggregate operation ...

  9. 【java8新特性】——lambda表达式与函数式接口详解(一)

    一.简介 java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式.函数式接口.方法引用.默认方法.新工具(编译工具).Stream API.Date Time ...

最新文章

  1. Android studio 编译器导入一个背景图片
  2. python3.6手册中文版-python3.6中文手册下载|
  3. Navicat和DBeaver的查询快捷键
  4. mysql双向复制(主主模式)
  5. 文本编辑器创建菜单栏
  6. 微服务+异步工作流+ Serverless,Netflix 决定弃用稳定运行 7 年的旧平台
  7. Sendmail服务器的配置
  8. java排除文件夹某文件,.gitignore排除文件夹,但包括特定的子文件夹
  9. GPRS核心网-GTP-C协议解析
  10. win10 RTX30系列显卡 安装tensorflow-gpu 1.15
  11. vscode 设置setting文件
  12. 优秀的JavaScript模块是怎样炼成的
  13. 计算机在材料化学中的应用论文,【多媒体技术论文】网络多媒体技术在材料化学中的应用(共2815字)...
  14. python怎么画地球_python画天空怎么画?
  15. 跳槽找工作避坑指南收集汇总
  16. Django CSRF(什么是CSRF?)\Django前后端分离csrf token获取方式
  17. 轻松搭建--类似微信的聊天工具
  18. Android eclipse 程序调试
  19. 特征金字塔:FPN(Feature Pyramid Networks)
  20. 达芬奇密码 第六章(3)

热门文章

  1. [转载] Java中Runtime的使用
  2. android 图片叠加xml,Android实现图片叠加效果的两种方法
  3. 后台窗口截图_万人拥捧的截图软件来啦!让你的工作效率提升不止一倍!
  4. dcom配置_spring cloud 二代架构依赖组件 全配置放送
  5. java数据类型_JAVA基础篇(数据类型)
  6. python安装路径查看_查看python安装路径及pip安装的包列表及路径
  7. 卡诺模板_无关条件的卡诺地图
  8. java 根据类名示例化类_Java即时类| getEpochSecond()方法与示例
  9. 转:Oracle物理文件
  10. 部分排序算法c语言实现