匿名内部类:可以让不能创建对象的 接口和抽象父类 创建对象 (这里的对象不是真的对象),然后重写方法,这样可以实现不被类继承或实现,就可以调用该方法(原来被继承重写的方法);
image.png

对象回调:(把创建的对象作为传参,进行go()方法,然后该对象作为方法的形参调用该对象的方法new Swimming)

image.png

还有一种情况就是:匿名内部类作为方法的入参形式 例如 : go(new Swimming()_

这里相当于将前面的go(s1) 直接替换成new Swimming()
image.png

  1. package com.itheima.d8_innerclass_anonymous;
  2. /**
  3. * 目标:掌握匿名内部类的使用形式(语法)
  4. */
  5. public class Test2 {
  6. public static void main(String[] args) {
  7. // // Swimming接口类相当于 父类
  8. // Swimming s = new Student(); // 这是一种多态的写法
  9. // go(s); // 多态 送的是Student类的对象 不过可以用自己的接口类(父类)接收
  10. //这里可以用匿名类来写
  11. Swimming s = new Swimming() { // 接口不能创建对象,这是定义的匿名内部类
  12. @Override
  13. public void swim() {
  14. System.out.println("学生游泳");
  15. }
  16. };
  17. go(s);
  18. Swimming s1 = new Swimming() {
  19. @Override
  20. public void swim() {
  21. System.out.println("老师过来比赛");
  22. }
  23. };
  24. go(s1);
  25. System.out.println("-------------------");
  26. /**
  27. * 还有一种情况就是:匿名内部类作为方法的入参形式 例如 : go(new Swimming()_
  28. */
  29. go(new Swimming() { // 这里相当于将前面的go(s1) 直接替换成new Swimming() 前提Swimming s1 = new Swimming
  30. @Override
  31. public void swim() {
  32. System.out.println("运动员跑的快");
  33. }
  34. });
  35. }
  36. /**
  37. * 学生 老师 运动员可以一起参加游泳比赛
  38. */
  39. public static void go(Swimming s){
  40. // 该方法接收的是接口类对象(接口充当一种父类,所有子类都可以进来(用多态)
  41. System.out.println("开始:");
  42. s.swim(); // 调用他的游泳功能
  43. System.out.println("结束。。。。");
  44. }
  45. }
  46. //class Student implements Swimming{ // 创建Student实现类,实现接口
  47. //
  48. // @Override
  49. // public void swim() {
  50. // System.out.println("学生快乐的自由游泳");
  51. // }
  52. //}
  53. // 创建一个接口实现某种功能
  54. interface Swimming{
  55. void swim(); // 默认抽象方法
  56. }