多态涉及到的概念:
-
向上转型(upcasting)
子类型–>父类型
又被称为:自动类型转换 -
向下转型(downcasting)
父类型–>子类型
又被称为:强制类型转换。【需要加强制类型转换符】
(无论是向上转型还是向下转型,两种类型之间必须要有继承关系,没有继承关系,程序是无法编译通过的。)
使用多态语法机制的一个例子:
Animal和Cat之间存在继承关系,Animal是父类,Cat是子类
Animal a1 = new Cat();//java中允许这种语法:父类型引用指向子类型对象。
解释: new Cat() 创建的对象的类型是Cat,a这个引用的数据类型是Animal,可见它们进行了自动类型转换(向上转型)。
错误的例子(向下转型)
“向下转型“经常会出现类型转换异常:java.lang.ClassCastException
Animal a2 = new Cat();
Bird tom = (Bird)a2;//Bird也是Animal的子类,但是Bird和Cat没有关系。
错问改正:
通过使用instanceof语句来判断a2是否属于Bird类型。
//instanceof运算符只有两个运算结果:true说明数据类型匹配,false说明数据类型不匹配
if(a2 instanceof Bird)
Bird bird = (Bird)a2;
if(a2 instanceof Cat)
Cat tom = (Cat)a2;
Java规范中要求:在强制类型转换之前,采用instanceof运算符先判断,避免java.lang.ClassCastException异常。
多态的作用?
降低程序的耦合度,提高程序的扩展力(面向抽象编程!!!)
实例代码坐标:D:\Code\IDEAProject\DuoTai