java多态知识

目录

一、定义

二、注意事项

三、多态的好处

四、多态的弊端以及解决办法


一、定义

多态定义:多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。

对象多态:都是同一对象,表现出不同角色,比如小明,既是学生,也是儿子。

行为多态:都是同一行为,表现出不同状态,比如跑步这种行为,有的人跑得快,有的人跑得慢。

二、注意事项

        1.多态的前提
继承/实现关系;存在父类引用子类对象;存在方法重写

下面这个图是一个多态的例子,里面注释有讲解

这个注释里面的的运行看左边,看的是创建对象时等号的左边。

        2.多态是对象、行为的多态,Java中的属性(成员变量)不谈多态。

就是说类里的属性不会因为new的构造器不同而属性也变化。如下图这个例子,表明成员变量是不会多态的。只会调用父类的成员变量,要想调用子类的,就得进行类型强转,这篇文章后面会讲到类型强转。

三、多态的好处

1.在多态形式下,右边对象是解耦合的,更便于扩展和维护。

        解耦合就是说可以替换的,比如写一个系统,分了好多模块去对接,当其中一个坏了的时候,就可以拿下来,换一个好的对接上去,这样使系统扩展和维护更方便。同理,在上一个例子中,当觉得Teacher()对象不好用了,可以换到Student(),

2.定义方法时,使用父类类型的变量作为形参,可以接收一切子类对象,扩展性更强、更便利.

案例:

        就是定义一个方法,这个方法的形参是那个父类类型的变量,在这里就是People p,这样他子类对象(Student s和Teacher t)都能做他的实参。扩展性更强。

四、多态的弊端以及解决办法

1.弊端:多态下不能使用子类的独有功能(子类的独有方法)。

        因为他编译的时候看的是左边,就是父类有没有这个功能,没有的话是不能直接调用的。

2.解决办法:用多态的强制类型转换

3.多态的类型转换,分为自动类型转换,强制类型转换

        自动类型转换:父类 变量名 = new  子类(); //这样写,new的时候会自动把子类的对象自动给到父类的变量。但是这种变量不能调用子类的方法。

        强制类型转换:子类 变量名=(子类)父类变量//把父类类型的变量转换为子类类型的变量。这样这个变量就可以调用子类的方法了。

4.注意事项:

(1)存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。
(2)运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException)的错误出来。

(3)建议强转前:使用instanceof关键字,判断当前对象的真实类型,再进行强转。

p instanceof Student


结束~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迭代加深算法(IDDFS)在电商商品推荐中的应用方案

在电商平台上应用迭代加深深度优先搜索(IDDFS)算法来探索用户可能感兴趣的商品路径,可以创建一个更加个性化和动态的推荐系统,提供更加个性化和动态的购物体验。 通过利用IDDFS来探索用户可能感兴趣的商品路径。通过限制搜索深度,系统可以逐步展示从用户当前查看的…

java:SpringBoot入门

Spring 提供若干子项目,每个项目用于完成特定功能 Spring Boot 可以简化配置并且快速开发 SpringBootWeb快速入门 创建Springboot模块并使用Springweb依赖 在类上添加注解 RestController可以将字符串自动转成json返回数据给页面 再在方法上添加注解 RequestMapping(&…

python应用-socket网络编程(2)

socket 是 Python 标准库中的一个模块,它提供了低级别的网络通信接口。使用 socket 模块,你可以创建客户端和服务器应用程序,以便在网络上进行数据交换。 接着上文我们介绍下socket模块其他的一些函数。 目录 gettimeout() 和settimeout()…

0422empAJAX项目

数据库字段: 多条件查询; 分页查询; 添加图片; ajax离职操作; 删除选项,点击离职操作后仍然可实现删除选项

项目部署总结

1、安装jdk 第一步:上传jdk压缩安装包到服务器 第二步:将压缩安装包解压 tar -xvf jdk-8uXXX-linux-x64.tar.gz 第三步:配置环境变量 编辑/etc/profile文件,在文件末尾添加以下内容: export JAVA_HOME/path/to/j…

鉴权到底做什么

两种方案: 将 token 放在 cookie 里;将 token 放在请求头里,用 Authorization 字段。 无论对于前端还是后端而言,这两种方案都是各有利弊的,下面稍微讲几点,实际开发中根据需求来选用即可。 将 token 放在…

python - ExcelWriter.book 无法设置属性 ‘book‘

问题描述 conda 环境使用python编辑excel,安装pandas依赖版本为2.2.1。 pandas2.2.1 以下代码片段报错: AttributeError: property book of OpenpyxlWriter object has no setter(无法设置属性 book ) with pd.ExcelWriter(t…

进程控制5 - exit()退出+子进程被收养+僵死进程

我们应当知道的是,在用fork创建子进程后,父子进程的执行的先后顺序是不定的,这时,我们可以用wait函数,wait()会暂停当前进程的执行,直到有信号到来或者子进程结束。总的来说,wait()的作用就是阻…

C语言编译的优化等级应该选哪个?O0、O1、O2还是O3

在使用IDE开发STM32程序时,IDE一般都会提供优化等级设置的选项,例如下图中KEIL软件优化等级的设置。 从上图中也可以看出,设置不同的优化等级,实际上是修改了编译器的编译参数。这个编译器是由ARM公司提供的C/C编译器armclang或者…

微信小程序Vue+nodejs+uniapp课堂教学辅助在线学习系统

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 后台主要实现功能:一、用户的管理(用户的信息管理) 二、 课程的管理(课程发布,课后成绩的查看&#xff0c…

DAY 5

1. 2. #include <iostream>using namespace std; class Person {string name;int *age;public:Person():name("zhangsan"),age(new int (18)){cout << "Person的无参函数" << endl;}Person(string name,int *age):name("zhangsan&q…

Linux提权--准备工作知识点工具

目录 知识点: 系列内容&#xff1a; 截至目前思路点总结如下&#xff1a; 思考点&#xff1a; 探针&漏扫工具网址 工具小总: 数据库提权工具网址: ---提权命令百科-- 演示案例&#xff1a; 知识点: 1、Linux 提权辅助项目-探针&漏扫 2、Linux 提权-配置 SUID …

模拟LinkedList实现的双向循环链表

1. 前言 前文我们分别实现了不带哨兵的单链表&#xff0c;带哨兵节点的双向链表&#xff0c;接着我们实现带哨兵节点的双向循环链表.双向循环链表只需一个哨兵节点&#xff0c;该节点的prev指针和next指针都指向了自身哨兵节点. 2. 实现双向循环链表的代码 例 : //模拟双向…

c++中的__declspec(dllexport) 和 __declspec(dllimport)

c中的__declspec(dllexport) 和 __declspec(dllimport) 1. __declspec(dllimport) __declspec(dllimport) 是Microsoft Visual C特有的修饰符&#xff0c;用于声明在动态链接库&#xff08;DLL&#xff09;中定义的函数和变量&#xff0c;以便在另一个模块中使用。它告诉编译…

水稻病害检测(YOLO数据集,多分类,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫)

是自己利用LabelImg工具进行手工标注&#xff0c;数据集制作不易&#xff0c;请尊重版权&#xff08;稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫&#xff09; 如果需要yolv8检测模型和数据集放在一起的压缩包&#xff0c;可以关注&#xff1a;最新最…

IO流体系

一.分类 1.字节流 &#xff08;1&#xff09;.InputStream&#xff08;字节输入流&#xff09; 定义&#xff1a;操作本地文件的字节输入流&#xff0c;可以把本地文件中的数据读取到程序中 书写步骤&#xff1a;1.创建字节输入流对象&#xff0c;2.读数据&#xff0c;3.释放…

聊聊Flink:Docker搭建Flink

一、准备工作 查看下Docker和Docker Compose版本&#xff0c;确保你安装了这些软件。 在 Flink 官网上下载 Flink 的 Docker 镜像。您可以使用以下命令从 Docker Hub 中下载&#xff1a; docker pull flink:1.18.0-scala_2.12 此命令将下载 Flink 1.18.0 版本的 Docker 镜像…

Java23种设计模式-创建型模式之单例模式

单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a;通过单例模式的方法创建的类在当前进程中只有一个实例&#xff08;根据需要&#xff0c;也有可能一个线程中属于单例&#xff0c;如&#xff1a;仅线程上下文内使用同一个实例&#xff09;&#xff0c;该类负责创…

电商架构:系统设计+表设计

如有不对&#xff0c;请指正 欢迎评论区交流 需要哪些系统 商品系统、订单系统、权限系统、审核系统等。 商品系统 订单系统 审核系统 权限系统 参考 基于电商中台架构-商品系统设计(一) 附件

2024年【流动式起重机司机】报名考试及流动式起重机司机复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【流动式起重机司机】报名考试及流动式起重机司机复审模拟考试&#xff0c;包含流动式起重机司机报名考试答案和解析及流动式起重机司机复审模拟考试练习。安全生产模拟考试一点通结合国家流动式起重机司机考试…