多态

多态的概述

image-20230319114544383

多态的格式与使用

image-20230319115224624

image-20230319114924748

image-20230319115144427

多态中的成员变量的使用特点(其实没有任何变化)

访问成员变量的两种方式:

  • 直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找
  • 间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找

多态中,成员变量不可以发生覆盖重写(比如,可以在子类的成员变量上添加@Override,会发现报错),只有方法可以发生覆盖重写

image-20230319115914276

image-20230319115854891

image-20230319115831384

多态中的成员方法的使用特点

在多态的代码中,成员方法的访问规则:

  • 看 new 的是谁,就优先用谁,没有则向上找

口诀:编译看左边,运行看右边

对比:

  • 成员变量:编译看左边,运行还看左边
  • 成员方法:编译看左边,运行看右边

image-20230319120823517

多态的好处

image-20230319181831562

对象的向上转型

image-20230319182510068

对象的向下转型

image-20230319183246604

image-20230319184116304

instanceof

如何知道一个父类引用的对象本来是哪个子类,怎么知道向哪个子类进行向下转型呢?

方案:用 instanceof

格式: 对象 instanceof 类名称 这会得到一个boolean值的结果,也就是判断前面的对象能不能当作后面类型的实例

image-20230319185037444

向下转型时,在未知原本类型时,一定要用 instanceof,否则容易出异常