一、多态概述 |
![]() |
【】多态,多种形态。 函数的重载就是一种多态。 对象也有多态。一个对象具备多种形态,new cat()既是cat也是animal。 【】形式体现上,父类创建的变量指向了子类对象。
【】一个对象两种形态就是多态,左边动物右边猫两种形态
【】多态用在接口上,形式是:接口的变量指向接口的实现子类的对象 【】多态用在类上,形式是:父类的变量指向子类的对象 |
二、多态的好处 |
【】将内容封装变成对象,指挥对象做事情,这已经是将问题简单化。但是对象多了,又变复杂了。 能不能指挥更多对象做事情,所以找他们的共性发现,都属于动物。就只会动物做事情,下面的猫狗🐖都去做事情了。 |
【】多态是方法的多态,不是属性的 【】既可以animal a=c; 也可以animal a=cat c; 还可以直接拿着c当a使用。 |
前面定义的animal,后面凡是继承animal的子类,都能被使用 |
三、多态的弊端 |
要想使用后期功能就应该用其子类自己的变量去调用,父类变量只能调用子类继承重写的方法。 用指挥父类的方法调用子类的,父类有的才能指挥。 |
【】多态的使用前提:继承重写(或实现重写)
|
四、多态中类型转换:自动向上提升限制子类特有功能、强制向下转换使用子类特有功能 |
【】一旦向上类型提升,cat变为animal,就只能使用animal的功能,但指向对象是cat,那么就只能用对应的cat的功能了 【】向上转型限制子类特有功能 |
【】强制转换。将变量a类型从animal转为cat, 【】向下转型使用子类特有功能 |
【】小猫,小猫可以转为动物,也可以转回来。但是无论怎么转变,它的对象到底是小猫。 |
【】转型不能把父类对象给转型或者把一种子类转型为另外一种。 只能子类自动提升为父类和转型成父类后再强制转换成子类。主角是子类。 |
【】举例:毕姥爷的两个方法都被毕老师继承:教学(但是被毕老师重写为教java)、钓鱼 毕老师实际有三个方法:教学java(重写父类方法)、钓鱼(继承父类)、看电影(自己的特有方法) 毕老师自动转换为毕姥爷类型后,只能使用毕姥爷声明过的方法。 想用自己的特有方法,需要强制转换为毕老师类型。 【】一会变为父类型,一会变回本类型。 |
五、需要强制转型前判断具体类型 |
【】具体类型判断:instanceof类似== |
【】instance 例子,instanceof(类)的实例=类的对象 【】在强制转型时容易出现转型失败,所以转型之前通常都会加入这种逻辑判断,这样可以增加代码健壮性。 必须要加上判断。 |
![]() |
【】a是animal类型的变量,需要判断传进来的具体是何种类型的时候,用instanceof来判断具体类型 【】instanceof只能判断引用型数据类型 |