Lambda表达式与匿名内部类的区别
注:使用Lambda表达式必须是接口,并且接口中有且仅有一个抽象方法
1. 匿名内部类调用方法时,方法参数可以是接口、抽象类、具体类
2. Lambda表达式只能调用接口,不能调用抽象类、具体类
3. 接口中有多个方法时,可以使用匿名内部类调用,不能使用Lambda表达式调用
4. 实现原理:匿名内部类编译后,会产生一个单独的.class字节码文件
Lambda表达式编译后,是没有一个单独的字节码文件
public class LambdaDemo {
public static void main(String[] args) {
/* //匿名内部类:调用一个方法参数可以是接口
useInter(new Inter() {
@Override
public void show() {
System.out.println("接口");
}
});
//匿名内部类:调用一个方法参数可以为抽象类
useAnimal(new Animal() {
@Override
public void method() {
System.out.println("抽象类");
}
});
//匿名内部类:调用一个方法参数可以为具体类
useStudent(new Student(){
@Override
public void study(){
System.out.println("具体类");
}
});*/
/*//Lambda表达式
useInter(()-> System.out.println("接口"));//可以
useAnimal(()-> System.out.println("抽象类"));//不可以
useStudent(()-> System.out.println("具体类"));//不可以*/
}
private static void useStudent(Student s){
s.study();
}
private static void useAnimal(Animal a){
a.method();
}
private static void useInter(Inter i) {
i.show();
}
}
//接口
public interface Inter {
void show();
}
//抽象类
public abstract class Animal {
public abstract void method();
}
//学生类
public class Student {
public void study(){
System.out.println("爱生活,爱学习!");
}
}