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,一经查实,立即删除!

相关文章

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 放在…

进程控制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…

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

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

聊聊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 镜像…

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

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

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

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

电脑已经有了一个Windows10,再多装一个Windows10组成双系统

前言 前段时间已经讲过一次双Windows系统的安装教程&#xff0c;但是小白重新去看了一下&#xff0c;发现写的内容太多&#xff0c;怕小伙伴看了之后一脸萌。 所以今天咱们就重新再来讲讲&#xff1a;在同一台机器上安装Windows10双系统的教程。 注意哦&#xff01;这里的Wi…

Android优化RecyclerView图片展示:Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas,Kotlin(b)

Android优化RecyclerView图片展示&#xff1a;Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas&#xff0c;Kotlin&#xff08;b&#xff09; 对 Android GridLayoutManager Glide批量加载Bitmap绘制Canvas画在RecyclerView&#xff0c;Kotlin&#xff08;a&#xff09;-…

【GitHub】主页简历优化

【github主页】优化简历 写在最前面一、新建秘密仓库二、插件卡片配置1、仓库状态统计2、Most used languages&#xff08;GitHub 常用语言统计&#xff09;使用细则 3、Visitor Badge&#xff08;GitHub 访客徽章&#xff09;4、社交统计5、打字特效6、省略展示小猫 &#x1f…

求解约瑟夫问题

思路&#xff1a; 我们要创建两个指针 有一个指针pcur指向头结点&#xff0c;该pcur作为报数的指针&#xff0c;还有一个指针ptail指向尾结点&#xff0c;作为记录pcur的地址 每报数为m时&#xff0c;pcur指向下一个元素的地址&#xff0c;ptail销毁报数为m的地址&#xff0…

制糖工业智能工厂数字孪生可视化平台,推进制糖产业数字化转型

制糖工业智能工厂数字孪生可视化平台&#xff0c;推进制糖产业数字化转型。随着信息技术的快速发展&#xff0c;数字化转型已成为各行各业的重要趋势。在糖果加工制造领域&#xff0c;智能工厂数字孪生可视化平台的出现&#xff0c;为行业数字化转型注入了新的活力。 糖果加工制…

算法训练营day25

零、回溯算法理论 参考链接13.1 回溯算法 - Hello 算法 (hello-algo.com) 1.尝试与回退 之所以称之为回溯算法&#xff0c;是因为该算法在搜索解空间时会采用“尝试”与“回退”的策略。当算法在搜索过程中遇到某个状态无法继续前进或无法得到满足条件的解时&#xff0c;它会…

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

目录 1 先简单回顾下客户端和服务端通信的知识 2 服务端常用函数 3 客户端常用函数 4 服务端和客户端都用的函数 5 示例介绍客户端和服务端通信过程 6 建立服务端套接制 7 创建服务端函数socket.create_server() 8 创建客户端套接字 9 客户端连接函数socket.create_co…