package J20250721;

/**
 * @author WanJl
 * @version 1.0
 * @title EatableDemo
 * @description
 * @create 2025/7/21
 */
public class EatableDemo{
    public static void useEatable(Eatable e){
        e.eat();
    }

    //main方法测试
    public static void main(String[] args) {
        //创建父类的引用指向子类的对象，名义上调用父类的方法，实际上调用子类的方法
        Eatable e=new EatableImpl();
        //把子类对象作为参数传进useEatable()方法
        useEatable(e);
        // ↓ 创建匿名内部类 并把匿名内部类对象赋值给父类的引用。
        Eatable e1=new Eatable() {
            @Override
            public void eat() {
                System.out.println("早饭、午饭、晚饭");
            }
        };
        useEatable(e1);

        //  ↓   创建匿名内部类，之间把匿名内部类的对象作为参数传入方法
        //匿名内部类
        useEatable(new Eatable() {
            public void eat() {
                System.out.println("早饭、午饭、晚饭");
            }
        });
        // ↓
        //使用lambda表达式
        //useEatable(实际参数);
        //实际参数 能是父类对象吗？Eatable对象？

        //实际参数： 子类的对象|匿名内部类对象|Java中的lambda表达式，就是匿名内部类的一种简写形式。
        useEatable(()->{
            System.out.println("......");
        });


        //父类的引用指向子类的对象
        Eatable a=()->{
            System.out.println("哈哈哈哈");
        };





    }

}
