这里写目录标题
Lambda表达式(理解为是一个函数式接口的实例化对象)
函数式编程思想
Lambda表达式的标准格式
表达式练习1(抽象方法无参无返回值)
使用前提
适用条件,有一个接口,接口有且只有一个抽象方法
具体代码
依次改进代码
对于Lambda表达式,这里括号里有没有参数是看接口中的抽象方法,代码块的内容代替接口实例化子类中代码块,接口中的抽象方法本来就没有内容
1.lambda表达式当作接口的实例化对象,所以main方法中,调用自定义方法,并将lambda表达式当作参数传入,因为自定义方法参数是接口,所以这一步操作相当于 接口实例化子类创建接口,这样,形参e就被激活了,e是个接口对象
2.自定义方法中有语句
e.eat(),的作用,就相当于重写接口抽象方法,而具体的重写内容,也就是对行为的设置,是由lambda表达式决定的
满足1 2 条件,就可以正常进行接口的使用。
表达式练习2(抽象方法有参无返回值)
分析
具体代码
这里Lambda表达式中,括号里带有形式参数,且该操作重写了fly方法,那么现在Lambda表达式就接管了fly方法的内容,所以一切操作看Lambda表达式代码块中的内容
但是参数是由自定义方法中重写的抽象方法中传入的实参决定的
表达式练习3(抽象方法有参有返回值)
分析
具体代码
可以说明:在自定义的以接口为参数的方法中,调用抽象方法语句的作用是传入实参,这里参数传入的是10和20
Lambda表达式的省略模式
Lambda表达式注意事项
第二点 要有上下文环境
其中,当把Lambda表达式当作参数传入时,实际上,他的意义是“一个Runnable的一个实例化子类”
Lmabda表达式和匿名内部类的区别
总结
注意第三点:就是使用匿名内部类会增加一个新的class文件,占用系统空间
具体代码
首先是在主函数中定义好三个方法,对应的参数分别是具体类、抽象类、接口
表示匿名内部类可以实现三种方法
而Lambda表达式的使用需要有限制条件,参数只能是接口,并且接口中只能有一个方法
接口中有两个方法时,匿名内部类可以照常使用,但是因为方法定义时,只调用了show方法,没有show2方法,所以即使匿名内部类使用了show2方法,那么也不会在控制台输出,只会输出第一个show方法