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"); } }
文章来源地址https://www.toymoban.com/news/detail-691105.html
文章来源:https://www.toymoban.com/news/detail-691105.html
到了这里,关于Lambda表达式和匿名内部类的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!