父类引用指向子类的对象:
通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法
(1)什么是向上转型?
子类引用的对象转换为父类类型称为向上转型。通俗地说就是将子类对象转为 父类对象。此处父类对象可以是接口
(2)什么是向下转型?
如果一个方法的形参是父类类型,调用子类独有 的方法时会用instanceof 关键字判断传入的对象是否是某个子类对象,
如果是的话,会把传入的值强制类型转换为子类
function(Animal animal){
if( animal instanceof Cat){
Cat cat = (Cat)animal
}
}
(2) 什么是虚拟方法调用?
我们看到,通过父类的引用指向子类的对象实体,当调用方法时,实际执行的 是子类重写父类的方法
(3)程序运行分为编译状态和运行状态。
对于多态性来说,编译时,"看左边",将此引用变量理解为父类的类型
运行时,"看右边",关注于真正对象的实体:子类的对象。那么执行的方法就是 子类重写的
子类对象的多态性,并不适用于属性
子类对象的多态性,不适用于静态方法