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("哈哈哈哈"); }; } }