EatableDemo.java 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package J20250721;
  2. /**
  3. * @author WanJl
  4. * @version 1.0
  5. * @title EatableDemo
  6. * @description
  7. * @create 2025/7/21
  8. */
  9. public class EatableDemo{
  10. public static void useEatable(Eatable e){
  11. e.eat();
  12. }
  13. //main方法测试
  14. public static void main(String[] args) {
  15. //创建父类的引用指向子类的对象,名义上调用父类的方法,实际上调用子类的方法
  16. Eatable e=new EatableImpl();
  17. //把子类对象作为参数传进useEatable()方法
  18. useEatable(e);
  19. // ↓ 创建匿名内部类 并把匿名内部类对象赋值给父类的引用。
  20. Eatable e1=new Eatable() {
  21. @Override
  22. public void eat() {
  23. System.out.println("早饭、午饭、晚饭");
  24. }
  25. };
  26. useEatable(e1);
  27. // ↓ 创建匿名内部类,之间把匿名内部类的对象作为参数传入方法
  28. //匿名内部类
  29. useEatable(new Eatable() {
  30. public void eat() {
  31. System.out.println("早饭、午饭、晚饭");
  32. }
  33. });
  34. // ↓
  35. //使用lambda表达式
  36. //useEatable(实际参数);
  37. //实际参数 能是父类对象吗?Eatable对象?
  38. //实际参数: 子类的对象|匿名内部类对象|Java中的lambda表达式,就是匿名内部类的一种简写形式。
  39. useEatable(()->{
  40. System.out.println("......");
  41. });
  42. //父类的引用指向子类的对象
  43. Eatable a=()->{
  44. System.out.println("哈哈哈哈");
  45. };
  46. }
  47. }