多态
定义:某一类事物的多种存在形态。
- 例:动物中猫,狗。
猫这个对象对应的类型是猫类型
- 猫 mao = new 猫();
同时猫也是动物中的一种,也可以把猫成为动物。
- 动物 d = new 猫();
- 动物是猫具体事物中抽取出来的父类型
- 父类引用指向了子类对象。
多态:可以理解为事物存在的多种体现形态
多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
多态的前提
1. 必须是类与类之间有关系。要么继承,要么实现。
2. 通常存在覆盖。
多态的好处
大大的提高了程序的扩展性。
多态的弊端
只能使用父类的引用访问父类中的成员
前期定义的内容不能调用后期的特有功能
多态出现在代码中的特点
提高扩展性,前期定义的代码可以调用后期的内容(父类方法使用出了子类的内容)
转型
Animal animal = new Cat();//类型提升,向上转型
//限制对特有功能的访问
Cat c = (Cat)animal;// 强制将父类的引用,转成子类类型。向下转型
//可继续使用子类中的特有功能
注意:
不可将父类类对象转成子类类型(Animal animal = new Animal();Cat c = (Cat)animal;)
不可将不同类型的子类进行转换。(Animal animal = new Dog();Cat c = (Cat)animal;)
ClassCastException //类型转换异常
多态自始至终都是子类对象在做着变化。
instanceof:判断两个引用类型是否相等。
用于向下转型时 进行判断 类型是否一致
if(animal instanceof Cat//true){
Cat c = (Cat)animal;
}//判断这个动物是不是猫
animal instanceof Object //true
animal instanceof animal //true