@FunctionalInterface 函数式接口注解 标明这是一个函数式接口
    Lambda表达式只能简化函数式接口(必须是接口类型,且只有一个抽象方法)的匿名内部类的写法形式
    image.png
    image.png
    简化:
    image.png
    将选中的代码拷贝下来,粘贴到 s1 = 后面,然后加一个->即可
    image.png

    简化代码2:
    去掉选中的 :技巧:保留形参列表 + 方法体 再去掉一个大括号(因为是多出来一个)
    image.png
    image.png

    1. package com.itheima.d9_lambda;
    2. public class LambdaDemo2 {
    3. public static void main(String[] args) {
    4. // 目标:学会使用Lambda的标准格式简化匿名内部类的代码形式
    5. // Lambda 只能简化接口中只有一个抽象方法的匿名内部类形式
    6. // Swimming s1 = new Swimming() {
    7. // @Override // 使用匿名内部类,重写方法,这样可以实现不被类继承或实现,就可以调用该方法(原来被继承重写的方法);
    8. // public void swim() {
    9. // System.out.println("老师游泳牛逼");
    10. // }
    11. // };
    12. Swimming s1 = () -> {
    13. System.out.println("老师游泳牛逼");
    14. };
    15. go(s1);
    16. // 将匿名内部类给方法作实参: 因为匿名内部类可以做为抽象类(被继承),接口(被实现) 的形参
    17. go(new Swimming() {
    18. @Override
    19. public void swim() {
    20. System.out.println("学生游泳很开心");
    21. }
    22. });
    23. go(() -> {
    24. System.out.println("学生游泳很开心");
    25. });
    26. }
    27. // 定义一个一个方法,用接口类型的变量,做形参
    28. public static void go(Swimming s){
    29. System.out.println("开始。。。");
    30. s.swim();
    31. System.out.println("结束");
    32. }
    33. }
    34. // 定义一个接口实现游泳功能
    35. @FunctionalInterface // 一旦加上这个注解必须时函数式接口,里面只能有一个抽象方法,(也可以不加,加了就只能有一个)
    36. interface Swimming{
    37. void swim();// 使用匿名内部类,重写方法,这样可以实现不被类继承或实现,就可以调用该方法(原来被继承重写的方法);
    38. }