目录
一、认识多态
1、什么是多态?
多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。
2、多态的具体代码体现
下图中,学生和老师都属于人类,这就是对象多态;学生对象和老师对象调用run方法,会产生不同的效果,这就叫行为多态。
3、多态的前提
- 有继承/实现关系
- 存在父类引用子类对象(即:用父类变量,接收子类对象)
下图中,父类是Animal类(动物类),子类是Wolf类(狼类)、Tortoise类(乌龟类)。
- 存在方法重写
4、多态的一个注意事项
多态是对象、行为的多态,而Java中的属性(成员变量)不谈多态。
举例:
二、多态的好处
1、使用多态的好处
- 好处一:在多态形式下,左边变量和右边对象是解耦合的,更便于扩展和维护。
解耦合:可随时更换、可替代的。比如:玩具车的电池没电了,可以随时换一块新的电池,此时就说电池和玩具车是解耦合的。
上图中,就可以说,左边的动物类Animal和右边的乌龟类、狼类....是解耦合的。
- 好处二:定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。
举例:
2、多态下产生的一个问题
- 多态下,不能使用子类的独有功能
三、多态下的类型转换
1、类型转换有几种形式?能解决什么问题?
- 自动类型转换、强制类型转换
- 可以把对象转换成真正的类型,从而解决了多态下不能调用子类独有方法的问题
2、强制类型转换需要注意什么?
存在继承/实现时,就可以进行强制类型转换,编译阶段不会报错。
但是,运行时,如果发现对象的真实类型与强转后的类型不同,就会报错。
举例:
3、强制类型转换前,Java建议我们做什么事情?
- 使用instanceof判断当前对象的真实类型:对象 instanceof 类型。
举例:
public class Test {
public static void main(String[] args) {
Animal a1 = new Wolf();
go(a1);
Animal a2 = new Tortoise();
go(a2);
}
//使用多态时,调用子类的特有方法(强制类型转换)
public static void go(Animal a){
System.out.println("开始...");
if(a instanceof Wolf){
Wolf w1 = (Wolf) a;
w1.eatSheep();
}else if(a instanceof Tortoise){
Tortoise t1 = (Tortoise) a;
t1.shrinkHead();
}
}
}
运行结果:
以上就是Java中多态的全部内容,想了解更多Java知识,请关注本博主~~
标签:类型转换,Java,Tortoise,对象,子类,基础,多态 From: https://blog.csdn.net/qq_63981644/article/details/143288615