08_Lambda表达式与匿名内部类的联系与区别

【简述】

Lambda表达式是匿名内部类的一种简化,因此它可以取代匿名内部类的作用。

 

【Lambda表达式与匿名内部类的 相同点

1.Lambda表达式和匿名内部类一样,都可以直接访问"effectively final"的局部变量,以及外部类的成员变量(包括实力变量和类变量)

2.Lambda表达式创建的对象和匿名内部类创建的对象一样,都可以直接调用从接口中继承的默认方法。

【相同点的实例】

package com.Higgn.Lambda;

@FunctionalInterface
interface 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表达式的代码块不允许调用接口中的默认方法。

 

转载于:https://www.cnblogs.com/HigginCui/p/6122504.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值