多态参数

接口引用可以指向实现接口类的对象

  1. package test;
  2. public class Main {
  3. public static void main(String[] args) {
  4. //接口的多态体现
  5. //接口类型的变量 if01 可以指向 实现了IF接口类的对象实例
  6. IF if01 = new Monster();
  7. if01 = new Car();
  8. //继承体现的多态
  9. //父类类型的变量 a 可以指向 继承AAA的子类的对象实例
  10. AAA a = new BBB();
  11. a = new CCC();
  12. }
  13. }
  14. interface IF {
  15. }
  16. class Monster implements IF {
  17. }
  18. class Car implements IF {
  19. }
  20. class AAA {
  21. }
  22. class BBB extends AAA {
  23. }
  24. class CCC extends AAA {
  25. }

多态数组

案例

给Usb数组中,存放Phone和相机对象,Phone类还有一个特别的方法call(),请遍历Usb数组,如果是Phone对象,除了调用Usb接口定义的方法外,还需要调用Phone的特有方法call

  1. package test;
  2. public class Main {
  3. public static void main(String[] args) {
  4. //多态数组 -> 接口类型数组
  5. Usb[] usbs = new Usb[2];
  6. usbs[0] = new Phone();
  7. usbs[1] = new Camera();
  8. /*
  9. 给Usb数组中,存放 Phone 和 相机对象,Phone类还有一个特有的方法call(),
  10. 请遍历Usb数组,如果是Phone对象,除了调用Usb 接口定义的方法外,
  11. 还需要调用Phone 特有方法 call
  12. */
  13. for(int i = 0; i < usbs.length; i++){
  14. usbs[i].work();//动态绑定
  15. //和前面一样,我们仍然需要进行类型的向下转型
  16. if(usbs[i] instanceof Phone){//判断他的运行类型是 Phone_
  17. // Phone phone = (Phone)usbs[i];
  18. // phone.call();
  19. ((Phone)usbs[i]).call();
  20. }
  21. }
  22. }
  23. }
  24. interface Usb{
  25. void work();
  26. }
  27. class Phone implements Usb {
  28. public void call() {
  29. System.out.println("手机可以打电话...");
  30. }
  31. @Override
  32. public void work() {
  33. System.out.println("手机工作中...");
  34. }
  35. }
  36. class Camera implements Usb {
  37. @Override
  38. public void work() {
  39. System.out.println("相机工作中...");
  40. }
  41. }

image.png

接口存在多态传递现象

  1. package test;
  2. /**
  3. * 演示多态传递现象
  4. */
  5. public class Main {
  6. public static void main(String[] args) {
  7. //接口类型的变量可以指向,实现了该接口的类的对象实例
  8. IG ig = new Teacher();
  9. //如果IG 继承了 IH 接口,而Teacher 类实现了 IG接口
  10. //那么,实际上就相当于 Teacher 类也实现了 IH接口.
  11. //这就是所谓的 接口多态传递现象.
  12. IH ih = new Teacher();
  13. ih.hi();
  14. ig.hi();
  15. }
  16. }
  17. interface IH {
  18. void hi();
  19. }
  20. interface IG extends IH{}
  21. class Teacher implements IG {
  22. @Override
  23. public void hi() {
  24. System.out.println("hi~~");
  25. }
  26. }

image.png