package com.pzc.demo01;
//1.1 定义一个函数式接口(即只包含一个抽象方法的接口)(因为在同一个.java 前缀不用写 public )
interface Ilike{
void lambda(); //可以不写 public abstract
}
//1.2 实现类
class Like implements Ilike{
@Override
public void lambda() {
System.out.println("I like lambda(正常写法)");
}
};
public class LambdaTest {
//2.1 静态内部类
static class Like2 implements Ilike{
@Override
public void lambda() {
System.out.println("I like lambda(静态内部类)");
}
};
public static void main(String[] args) {
//1.3 创建主函数,实例化对象,调用对象方法
Ilike like = new Like();
like.lambda();
//2.2 实例化对象,调用对象方法
Ilike like2 = new Like2();
like2.lambda();
//3.1 局部内部类
class Like3 implements Ilike{
@Override
public void lambda() {
System.out.println("I like lambda(局部内部类)");
}
};
//3.2 实例化对象,调用对象方法
Ilike like3 = new Like3();
like3.lambda();
//4 匿名内部类(没有类的名称,必需借助接口或者父类)
Ilike like4;
like4 = new Ilike() {
@Override
public void lambda() {
System.out.println("I like lambda(匿名内部类)");
}
}; //注意写";"
//调用方法
like4.lambda();
//5 Lambda简化(函数式接口是前提!!!)
Ilike like5;
like5 = ()->{ //对比4 类中只有一个方法(最根本原因实现的是函数式接口)
//所以此时省略类名、方法名
System.out.println("I like lambda(Lambda 表达式)");
};
like5.lambda();
//类中只有一条语句,可以进一步简化
like5 = () -> System.out.println("I like lambda(Lambda 表达式(极简))");
like5.lambda();
}
}
输出: