- 多态的具体体现
- 对象的多态(核心,重点)
1) 一个对象的编译类型和运行类型可以不一致
2) 编译类型在定义对象时,就确定了,不能改变
3) 运行类型是可以改变的
4) 编译类型看定义时 = 号的左边,运行类型看 =号的右边
Animal animal=new Dog(); [animal编译类型是Animal,运行类型是Dog]
Animal animal=new Cat(); [animal的运行类型是Cat,编译类型仍然是Animal]
- 多态注意事项和细节讨论
多态的前提是:两个对象(类)存在继承关系
- 多态的向上转型
1)本质:父类的引用指向了子类的对象
2)语法:父类类型 引用名 = new 子类类型();
3)特点:编译类型看左边,运行类型看右边。
可以调用父类中的所有成员(需遵守访问权限)
不能调用子类中特有成员;
最终运行效果看子类的具体实现!
- 多态的向下转型
1)语法:子类类型 引用名 = (子类类型)父类引用;
2)只能强转父类引用,不能强转父类对象
3)要求父类的引用必须指向的是当前目标类型对象
4)可以调用子类类型中的所有成员
instanceOf 比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型