赞
踩
1、所需类型不同
- 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
- Lambda表达式:只能是接口
2、使用限制不同
- 如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
- 如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式
3、实现原理不同
- 匿名内部类:编译之后,产生一个单独的.class字节码文件
- Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成
package com.lambda; public class LambdaDemo { public static void main(String[] args) { useStudent(new Student() { @Override public void study() { System.out.println("具体类");//具体类 } }); useAnimal(new Animal() { @Override public void method() { System.out.println("抽象类");//抽象类 } }); useInter(() -> System.out.println("接口"));//接口 } //使用实体类作为方法的形参 public static void useStudent(Student s) { s.study(); } //使用抽象类作为方法的形参 public static void useAnimal(Animal a) { a.method(); } //使用接口作为方法的形参 public static void useInter(Inter i) { i.show(); } } interface Inter { void show(); } abstract class Animal { public abstract void method(); } class Student { public void study() { System.out.println("爱生活,爱Java"); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。