首页 > 代码库 > 08_Lambda表达式与匿名内部类的联系与区别
08_Lambda表达式与匿名内部类的联系与区别
【简述】
Lambda表达式是匿名内部类的一种简化,因此它可以取代匿名内部类的作用。
【Lambda表达式与匿名内部类的 相同点】
1.Lambda表达式和匿名内部类一样,都可以直接访问"effectively final"的局部变量,以及外部类的成员变量(包括实力变量和类变量)
2.Lambda表达式创建的对象和匿名内部类创建的对象一样,都可以直接调用从接口中继承的默认方法。
【相同点的实例】
package com.Higgn.Lambda;@FunctionalInterfaceinterface Displayable{ public void display(); default int add(int a,int b){ return a+b; }}class LambdaAndInner{ private int age=10; private static String name="Higgin"; public void test(){ String book="《java编程思想》"; Displayable dis=()->{ //访问"effectively final"局部变量 System.out.println("book局部变量为:"+book); //访问外部类的实力变量和类变量 System.out.println("外部类的实例变量age:"+age); System.out.println("外部类的类变量name:"+name); }; dis.display(); //调用dis对象从接口中继承的add()方法 System.out.println(dis.add(10, 20)); }}public class TestDemo { public static void main(String[] args) { LambdaAndInner lai=new LambdaAndInner(); lai.test(); }}
【运行结果】
【Lambda表达式与匿名内部类的 区别】
1.匿名内部类可以为任意接口创建实例——不管有多少个抽象方法,只要匿名内部类实现了所有方法即可。
但是Lambda表达式只能为函数式接口创建实例。
2.匿名内部类可以为抽象类甚至普通类创创建实例,
但lambda表达式只能为函数式接口创建实例。
3.匿名内部类实现的抽象方法体允许调用接口中的默认方法,
但Lambda表达式的代码块不允许调用接口中的默认方法。
08_Lambda表达式与匿名内部类的联系与区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。