@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() {@Overridepublic 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();// 使用匿名内部类,重写方法,这样可以实现不被类继承或实现,就可以调用该方法(原来被继承重写的方法);}
