Lambda表达式与匿名内部类的联系和区别
来源:互联网 发布:c语言有趣小程序 编辑:程序博客网 时间:2024/06/06 03:08
联系:
lambda表达式创建的对象与匿名内部类生成的对象一样,可以直接调用接口中继承的默认方法。
区别:
1.匿名内部类可以为任意接口创建实例,不管接口中包含多少个抽象方法,只要在匿名内部类中实现所有抽象方法即可。
但在lambda表达式中只能为函数式接口创建实例。
2.匿名内部类可以为抽象类甚至普通类创建实例;但lambda表达式只能为函数式接口创建实例。
3.匿名内部类实现的抽象方法可以允许调用接口中定义默认方法。但lambda表达式的代码块不允许调用接口中定义默认方法。
package learnJava;public class NimingLei {public void test(Product p) {System.out.println(p.getName()+" : "+p.getPrice());}public void test2(Device q){System.out.println(q.getPrice());System.out.println(q.getName());}public static void main(String[] args) {NimingLei ta=new NimingLei();ta.test(new Product() {public double getPrice() {return 100;}public String getName() {return "新产品";}});ta.test2(new Device("示波器") {{System.out.println("匿名内部类的初始化块");//可以写初始化块}public double getPrice() {//必须实现抽象方法return 562.2;}public String getName() {//可以重写父类的普通方法return "新键盘";}});}}interface Product{public double getPrice();public String getName();}abstract class Device{//既可以是抽象类也可以为普通类private String name;public abstract double getPrice();public String getName() {return "鼠标";}public Device() {}public Device(String name) {this.name=name;}}//匿名内部类即可以为抽象类也可以为普通类创建实例。
package learnJava;public class Lambda1 {public void eat(Eatable e) {System.out.println(e);e.taste();}public void drive(Flyable f) {System.out.println(f);f.fly("晴朗");//调用接口中的方法}public void test(Addable g) {System.out.println(g);g.Add(10, 20);}public static void main(String[] args) {Lambda1 ew=new Lambda1();ew.eat(()->System.out.println("真不错"));//形参列表为空//()->System.out.println("真不错")相当于一个Eatable对象,实现了一个接口的方法ew.drive(weather->System.out.println("今天的天气: "+weather));//创建一个接口对象,并实现接口里的抽象方法,形参列表要与接口中的抽象方法相同。ew.test((a,b)->{System.out.println("a的值是:"+a+" b的值是:"+b);System.out.println(a+b);});}}interface Eatable{void taste();}interface Flyable{void fly(String weather);}interface Addable{void Add(int a,int b);}
阅读全文
0 0
- Lambda表达式与匿名内部类的联系和区别
- Java匿名内部类与Lambda表达式
- Java的匿名内部类与Lambda表达式
- Lambda表达式和匿名内部类
- Lambda表达式和匿名内部类
- JAVA8 匿名内部类和lambda表达式
- Java:匿名内部类和Lambda表达式
- Lambda表达式与匿名内部类主要存在如下区别与相同点
- 第6章 Lambda表达式和匿名内部类
- lambda表达式代替匿名内部类
- 内部类、匿名类、Lambda表达式
- 内部类与匿名内部类区别和应用
- java:内部类与外部类的区别和联系
- 内部类与匿名内部类的区别
- 内部类与匿名内部类的区别
- Java内部类与匿名内部类的区别
- 内部类和Lambda表达式
- Java SE8 Lambda 基础入门---lambda表达式与匿名内部类
- 一脸懵逼学习Hdfs---动态增加节点和副本数量管理
- android 代码样式指南
- c#委托和事件
- Ubuntu安装Mysql+Navicat及破译方案
- 直接插入排序
- Lambda表达式与匿名内部类的联系和区别
- python爬取CSDN博客并用WordCloud词云分析
- boost之内存池使用实例
- 多线程生产者与消费者问题代码模型
- SQL Server代理服务无法启动的处理方法(转载)
- 一脸懵逼学习Hive(数据仓库基础构架)
- 【常用排序算法】以最简单的方式理解插入排序
- 单KEY业务,数据库水平切分架构实践
- BZOJ1194: [HNOI2006]潘多拉的盒子