首页 > 分享 > Java笔记:多态polymorphic

Java笔记:多态polymorphic

什么是多态?为什么要使用多态?
首先我们通过下面的一个卫视宠物不同食物的例子引出

在这里插入图片描述
正常不使用多态的情况下,喂养不同的宠物不同的食物,我没都需要另写一个方法,构成feed方法重载
在这里插入图片描述
但是如果动物和食物过多,就需要定义更多方法,所以使用常规方法时代码的复用性不高,不利于代码的维护.由此引出多态
多态的基本介绍
在这里插入图片描述
方法的重写和重载就体现多态
在这里插入图片描述
在这里插入图片描述
对象的多态
在这里插入图片描述
编译类型就是javac的时候,运行类型就是程序运行时的类型
一个父类的引用既可以指向父类,也可以指向子类
在这里插入图片描述
在这里插入图片描述
然后我们现在用多态去解决之前宠物喂养的问题,下面的一个方法就可以代替上述所有传统写法,大大提高了效率
在这里插入图片描述
向上转型
在这里插入图片描述
多态中强调:编写java程序时,引用类型变量只能调用其编译时类型的变量.
在这里插入图片描述
向下转型
只能强转父类的引用,不能强转父类的对象.
在这里插入图片描述
我们再回到上面animal无法调用catchmouse方法的问题是,那么如果我们确实想让animal去调用子类cat的catchmouse方法该怎么办?
办法就是使用向下转型,具体如下
在这里插入图片描述

这里简述一下向下转型与 Cat cat = new Cat()的区别(个人理解,仅供参考).
强转不用开辟新的对象空间,创建cat的话,父类引用animal指向的子类对象就浪费了
强转之后指向的对象没有发生改变,而new Cat()过后是新创建了一个cat对象,新创建的对象与原来的对象不一致.(类似于 父类僵尸A想使用其子类自爆僵尸的自爆方法,但是父类僵尸A没有这个方法,于是僵尸A使用了向下转型拥有了自爆方法,如果直接 new 自爆僵尸的话就相当于又创建了一个新的自爆僵尸B,这两个对象完全不一样)
那为什么上面的animal向下转型成cat以后不能再向下转型成dog?
因为向下转型后,animal对象相当于一个cat类,如果这样做就相当于强行将cat转成dog,这是不可能的,最终编译没有问题,但是运行时会报"classcastexception(类型转换异常)"的错误.
在这里插入图片描述

属性没有重写之说,属性的值看编译类型
在这里插入图片描述
instanceOf比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
多态练习
练习1
在这里插入图片描述
练习1答案
在这里插入图片描述
练习2
在这里插入图片描述
属性看编译类型,方法看运行类型,运行类型遵循先子后父
在这里插入图片描述

相关知识

Java笔记:多态polymorphic
java测试类pet
多态使用案例
java练习题
Java任务项目
编写程序模拟“主人”喂养“宠物”的场景,利用多态的思想!!!
java/jsp/ssm洗浴预约服务系统【2024年毕设】
电子宠物游戏java
Java基于JAVA语言的宠物寄养管理(开题+源码)
毕业设计:基于java的宠物管理系统设计与实现

网址: Java笔记:多态polymorphic https://m.mcbbbk.com/newsview89211.html

所属分类:萌宠日常
上一篇: 武林外传里面怎么给宠物吃东西?
下一篇: 解决你的狗狗受到惊吓或感到害怕应