@FunctionalInterface 函数式接口注解 标明这是一个函数式接口
Lambda表达式只能简化函数式接口(必须是接口类型,且只有一个抽象方法)的匿名内部类的写法形式
简化:
将选中的代码拷贝下来,粘贴到 s1 = 后面,然后加一个->即可
简化代码2:
去掉选中的 :技巧:保留形参列表 + 方法体 再去掉一个大括号(因为是多出来一个)
package com.itheima.d9_lambda;
public class LambdaDemo2 {
public static void main(String[] args) {
// 目标:学会使用Lambda的标准格式简化匿名内部类的代码形式
// Lambda 只能简化接口中只有一个抽象方法的匿名内部类形式
// Swimming s1 = new Swimming() {
// @Override // 使用匿名内部类,重写方法,这样可以实现不被类继承或实现,就可以调用该方法(原来被继承重写的方法);
// public void swim() {
// System.out.println("老师游泳牛逼");
// }
// };
Swimming s1 = () -> {
System.out.println("老师游泳牛逼");
};
go(s1);
// 将匿名内部类给方法作实参: 因为匿名内部类可以做为抽象类(被继承),接口(被实现) 的形参
go(new Swimming() {
@Override
public void swim() {
System.out.println("学生游泳很开心");
}
});
go(() -> {
System.out.println("学生游泳很开心");
});
}
// 定义一个一个方法,用接口类型的变量,做形参
public static void go(Swimming s){
System.out.println("开始。。。");
s.swim();
System.out.println("结束");
}
}
// 定义一个接口实现游泳功能
@FunctionalInterface // 一旦加上这个注解必须时函数式接口,里面只能有一个抽象方法,(也可以不加,加了就只能有一个)
interface Swimming{
void swim();// 使用匿名内部类,重写方法,这样可以实现不被类继承或实现,就可以调用该方法(原来被继承重写的方法);
}