JavaSE-22.1.7Lambda表达式和匿名内部类的区别

Posted yub4by

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE-22.1.7Lambda表达式和匿名内部类的区别相关的知识,希望对你有一定的参考价值。

 1 package day13.lesson1.p3;
 2 
 3 /*
 4 1.8 Lambda表达式和匿名内部类的区别
 5 
 6     所需类型不同
 7         匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
 8         Lambda表达式:只能是接口
 9 
10     使用限制不同
11         如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
12         如果接口中多于一个抽象方法,只能使用匿名内部类,而不能使用Lambda表达式
13 
14     实现原理不同
15         匿名内部类:编译之后,产生一个单独的.class字节码文件
16         Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成
17  */
18 public class LambdaDemo {
19     public static void main(String[] args) {
20         //匿名内部类
21         useInter(new Inter() {
22             @Override
23             public void show() {
24                 System.out.println("接口");
25             }
26         });
27 
28         useAnimal(new Animal() {
29             @Override
30             public void method() {
31                 System.out.println("抽象类");
32             }
33         });
34 
35         useStudent(new Student(){
36             @Override
37             public void study() {
38 //                super.study();
39                 System.out.println("具体类");
40             }
41         });
42 
43         //Lambda
44         useInter(() -> System.out.println("接口"));
45 //        useAnimal(() -> System.out.println("抽象类")); //编译异常
46 //        useStudent(() -> System.out.println("具体类")); //编译异常
47 
48         /*useInter(new Inter() {
49             @Override
50             public void show() {
51                 System.out.println("show");
52             }
53 
54             @Override
55             public void show2() {
56                 System.out.println("show2");
57             }
58         });*/
59     }
60 
61     private static void useInter(Inter i){
62         i.show();
63     }
64 
65     private static void useAnimal(Animal a){
66         a.method();
67     }
68 
69     private static void useStudent(Student s){
70         s.study();
71     }
72 }
73 
74 interface Inter{
75     void show();
76 //    void show2();
77 }
78 
79 abstract class Animal{
80     public abstract void method();
81 }
82 
83 class Student{
84     public void study(){
85         System.out.println("love life, love java");
86     }
87 }

 

以上是关于JavaSE-22.1.7Lambda表达式和匿名内部类的区别的主要内容,如果未能解决你的问题,请参考以下文章

Lambda表达式和匿名内部类的异同

转载 C#匿名函数 委托和Lambda表达式

Python入门-5函数:07lambda表达式和匿名函数-eval()函数

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

Java的Lambda表达式

Lambda 表达式与匿名内部类