一、接口中的默认方法

在JDK1.8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的

在JDK 1.8开始 支持使用static和default 修饰 可以写方法体,不需要子类重写。

1.1、定义接口默认方法

public interface MyInterface {// 普通抽象方法,默认是public abstract修饰的,没有方法体void add();/** 默认方法,有方法体 JDK1.8之后* 任何一个实现了MyInterface 接口的类都会向动继承defaultAdd的实现*/default void defaultAdd() {System.out.println("JDK8--》defaultAdd");}/** 静态方法,有方法体 JDK1.8之后* 可以使用MyInterface类直接调用*/static void getAdd() {System.out.println("JDK8--> static getAdd");}
}

定义接口默认实体方法如果报extension methods are not supoorted at language level  'x'

解决方式请查看:   https://blog.csdn.net/qazzwx/article/details/119378120

1.2、接口实现

public class MyInterfaceImpl  implements MyInterface {@Overridepublic void add() {}public static void main(String[] args) {MyInterface myInterface=new  MyInterfaceImpl();myInterface.defaultAdd();MyInterface.getAdd();}
}

打印值

二、Lambda表达式

2.1、Lambda表达式百度百科

https://baike.baidu.com/item/Lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F/4585794?fr=aladdin

2.2、Lambda表达式依赖于函数接口

  1. @FunctionalInterface 表示该接口为函数接口
  2. 在函数接口中只能够允许有一个抽象方法
  3. 在函数接口中必须有一个抽象方法
  4. 可以在函数接口中定义object类中public方法
  5. 可以通过default 修饰为普通方法

没有抽象方法会报错 no target method

多个抽象方法会报错

Multiple non-overriding abstract methods found in interface com.enter.service.MyInterface

使用Object中非 public方法会报错

Multiple non-overriding abstract methods found in interface com.enter.service.MyInterface

函数式接口

@FunctionalInterface
public interface MyInterface {// 普通抽象方法,默认是public abstract修饰的,没有方法体void add();boolean equals(Object obj);/** 默认方法,有方法体 JDK1.8之后* 任何一个实现了MyInterface 接口的类都会向动继承defaultAdd的实现*/default void defaultAdd() {System.out.println("JDK8-->defaultAdd");}/** 静态方法,有方法体 JDK1.8之后* 可以使用MyInterface类直接调用*/static void getAdd() {System.out.println("JDK8--> static getAdd");}
}

Lamdba调用匿名函数接口对比其他方式

public class Test {public static void main(String[] args) {// 使用new的实现类的形式调用接口MyInterface myInterface = new MyInterfaceImpl();myInterface.add();// 使用匿名内部类调用有参数函数方法MyInterface myInterface1 = new MyInterface() {@Overridepublic void add() {System.out.println("使用匿名内部类的形式调用接口");}};myInterface1.add();// 使用Lamdba 调用有参数函数方法MyInterface myInterface2 = () -> {System.out.println("使用Lambda表达式形式调用接口");};myInterface2.add();// 使用Lamdba 调用有参数函数方法 精简版MyInterface myInterface3 = () -> System.out.println("使用Lambda表达式形式调用接口");myInterface3.add();}
}

带参数和返回值

@FunctionalInterface
public interface MyInterface {int add(int i,int j);}
public class Test {public static void main(String[] args) {int num1 = 6;int num2 = 6;// 使用匿名内部类调用有参数函数方法int result = new MyInterface() {@Overridepublic int add(int i, int j) {return i + j;}}.add(num1, num2);System.out.println(result);// 使用Lamdba 调用有参数函数方法MyInterface myInterface2 = (i, j) -> {System.out.println("使用Lambda表达式形式调用接口");return i + j;};System.out.println(myInterface2.add(num1, num2));}
}

Java1.8中关于函数式接口的包是java.util.function,里面全部是函数式接口。主要包含几大类:Function、Predicate、Supplier、Consumer和*Operator(没有Operator接口,只有类似BinaryOperator这样的接口)。

JAVA 8 接口中的默认方法和Lambda 表达式基本使用相关推荐

  1. C#中的委托,匿名方法和Lambda表达式

    简介在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个Firs ...

  2. [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询

    此文章非原创,转载自诗人江湖老,原文地址 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找.过滤等等常见的任务的时候 ...

  3. java 8 lambda reduce_java8种的reduce方法和lambda表达式结合使用

    今天碰到了java8种的reduce方法,查了资料之后写一些总结,以免自己以后用到. 计算1,2,3,4,5 的和,并且初始值为3 也就是计算3+1+2+3+4+5 1.使用Stream 两个参数的r ...

  4. IntelliJ Idea中使用Java8新特性lambda表达式

    环境: 环境变量JAVA_HOME配置jdk1.8 idea配置支持lambda: File -> Project Structure -> Modules ->  Language ...

  5. java接口可以写方法体吗_JDK1.8接口中可以写方法体

    在Java中,接口里只能写方法的声明,而不能写方法的具体实现,方法的实现要在实现接口的类中编写.但在JDK1.8中,接口可以对方法的声明写具体实现,个人觉得这有点违背接口的设计初衷. 下面我们来具体看 ...

  6. Java 8——接口中个的默认方法和静态方法

    在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静 ...

  7. Java 8 辣么大(lambda)表达式不慌之—–(四)示例-Collectors中的中的joining 方法和mapping方法

    Java 8 辣么大(lambda)表达式不慌之-–(四)示例-Collectors中的joining 方法和mapping方法 joining 方法 mapping方法 先定义好后面做示例要用的数据 ...

  8. Java接口中的默认方法冲突

    在Java中,我们可以为其接口中定义的方法提供一个默认的实现.当然,这可能并没有很大的用处,不过,在某些情况下可能很有用!如果要为接口方法提供一个默认实现,必须要用 default关键字 修饰. 在为 ...

  9. Java创建数组的三种方法和ArrayList的用法

    Java创建数组的三种方法和ArrayList的用法 Java创建数组的三种方法 一.声明并赋值 二.声明数组名开辟空间 三.声明数组并指定元素个数 四.多维数组 ArrayList的用法 一.添加元 ...

最新文章

  1. R语言使用tryCatch函数调试R代码实战:tryCatch函数运行正常R代码、tryCatch函数运行有错误(error)的R代码示例/tryCatch函数运行有警告(warning)的R代码示例
  2. linux oracle 配置监听器
  3. redis 面试问题问答Top 10
  4. Struts值栈与Ognl
  5. ssl1746-商务旅行【tarjan,LCA】
  6. 定义一个类:实现功能可以返回随机的10个数字,随机的10个字母, 随机的10个字母和数字的组合;字母和数字的范围可以指定,类似(1~100)(A~z)...
  7. 轮盘赌算法的java实现算例
  8. java炫酷龙卷风源码_Java-使用二叉树实现快速排序-遁地龙卷风
  9. 浅析ASP.NET HTTP Module
  10. linux 6.7 ifcfg eth0,centos 的ifcfg-eth0只有只读权限,怎么修改其内容呢?
  11. 安防与消防融合发展的现状与机遇分析
  12. 21年,周杰伦越发孤独
  13. 快速查询快递单号物流的方法有哪些?
  14. 设计模式-Facade门面-Mediator调停者
  15. 双击打开Excel文件要反应很久之后才能打开,先开excel程序,再打开文件就很快的解决办法...
  16. 【数据库系统】数据库编程
  17. handlebars使用
  18. DXP_protel2004_原理图设计基础_集成运放原理图设计_原理图后期处理
  19. 阿里云实时音视频直播鉴权java代码示例
  20. 【多图超详细】从零开始安装配置Cuckoo sandbox并提交样本进行分析

热门文章

  1. Danalab线束测试仪
  2. 超级计算机天河二号浅析
  3. 让Github飞起来
  4. 通天阁塔机器人图片_世界最大双足机器人亮相世博大阪馆
  5. 学生成绩管理系统mysql课程设计_数据库课程设计(极其简单的学生成绩管理系统)...
  6. Springboot系列(二十二):如何纯文本转成.csv格式文件?|超级详细,建议收藏
  7. 武汉大学计算机学院出国,2017年6月武汉大学研究生出国交流资助项目评审结果公示...
  8. 【笔记】浮动属性float的应用02——浮动图像和标题
  9. vb6将excel数据导入mysql_VB6.0如何实现将excel数据导入mssql数据库中
  10. unbound:安装与配置