多态

一、多态概述
image

【】多态,多种形态。

函数的重载就是一种多态。

对象也有多态。一个对象具备多种形态,new cat()既是cat也是animal。

【】形式体现上,父类创建的变量指向了子类对象。

图片

 

图片

 【】一个对象两种形态就是多态,左边动物右边猫两种形态

 

【】多态用在接口上,形式是:接口的变量指向接口的实现子类的对象

【】多态用在类上,形式是:父类的变量指向子类的对象

 
 二、多态的好处

 【】将内容封装变成对象,指挥对象做事情,这已经是将问题简单化。但是对象多了,又变复杂了。

能不能指挥更多对象做事情,所以找他们的共性发现,都属于动物。就只会动物做事情,下面的猫狗🐖都去做事情了。

 

图片

 

【】多态是方法的多态,不是属性的

【】既可以animal a=c;

也可以animal a=cat c;

还可以直接拿着c当a使用。

 

图片

 前面定义的animal,后面凡是继承animal的子类,都能被使用

图片

 
 三、多态的弊端
 

图片

 

要想使用后期功能就应该用其子类自己的变量去调用,父类变量只能调用子类继承重写的方法。

用指挥父类的方法调用子类的,父类有的才能指挥。

 【】多态的使用前提:继承重写(或实现重写)

图片

 

 
 四、多态中类型转换:自动向上提升限制子类特有功能、强制向下转换使用子类特有功能

  【】一旦向上类型提升,cat变为animal,就只能使用animal的功能,但指向对象是cat,那么就只能用对应的cat的功能了

【】向上转型限制子类特有功能

图片

 【】强制转换。将变量a类型从animal转为cat,

【】向下转型使用子类特有功能

图片

【】小猫,小猫可以转为动物,也可以转回来。但是无论怎么转变,它的对象到底是小猫。

【】转型不能把父类对象给转型或者把一种子类转型为另外一种。

只能子类自动提升为父类和转型成父类后再强制转换成子类。主角是子类。

image

【】举例:毕姥爷的两个方法都被毕老师继承:教学(但是被毕老师重写为教java)、钓鱼

毕老师实际有三个方法:教学java(重写父类方法)、钓鱼(继承父类)、看电影(自己的特有方法)

毕老师自动转换为毕姥爷类型后,只能使用毕姥爷声明过的方法。

想用自己的特有方法,需要强制转换为毕老师类型。

【】一会变为父类型,一会变回本类型。

image

image

 
 
五、需要强制转型前判断具体类型
【】具体类型判断:instanceof类似==

【】instance 例子,instanceof(类)的实例=类的对象

【】在强制转型时容易出现转型失败,所以转型之前通常都会加入这种逻辑判断,这样可以增加代码健壮性。

必须要加上判断。

image

【】a是animal类型的变量,需要判断传进来的具体是何种类型的时候,用instanceof来判断具体类型

【】instanceof只能判断引用型数据类型

 
 
 
 
 
 
 
 
 
 
posted @ 2025-09-10 17:26  ibddindonon  阅读(6)  评论(0)    收藏  举报