多态、多态的特点、类型转换(Java)

一、多态介绍

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

对象多态就比如水果可以是苹果也可以是西瓜。

行为多态如何分辨呢,编译的时候会看People类中是否有run方法,运行的时候看Teacher中或者Student中的run方法。

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

多态注意事项:多态是对象、行为的多态,Java中的属性(成员变量)不谈多态。

使用多态的好处:在多态形式下,右边对象是解耦合的,更便于拓展和维护。并且定义方法时,使用父类类型的形参,可以接收一切子类对象,拓展性更强。

public class Test {public static void main(String[] args) {//多态的好处//1.对象多态:一个对象可以有多个类,如果一个对象是某个类,那么它可以是其他类People p1 = new Teacher();p1.run(); //好处1:实现解耦合,右边对象可以随时切换,后续业务随机应变//好处2:可以使用父类类型的变量作为形参,可以接受一切子类对象Student s1 = new Student();Teacher t1 = new Teacher();test(s1);test(t1);}  public static void test(People p) {}
}

二、类型转换

自动类型转换:父类  变量名 = new  子类();

强制类型转换:子类  变量名 = (子类) 父类变量

多态下的问题:无法直接调用子类的独有功能,而使用强制类型转换就可以解决问题:

强制类型转换的注意事项:存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。运行时,如果发现对象的真实类型和强制转换后的类型不同,就会报类型转换异常错误。

强制转换前可以使用instanceof关键字,判断当前对象的真实类型,再进行转换。

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

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

相关文章

工具推荐系列-极客编辑器(实时在线编写md文件同步GitHub)

工具项目地址:https://github.com/geekeditor/geekeditor-desktop-releases/tree/main 工具基础配置方法:https://www.geekeditor.com/workspace1.x.html 详细同步代码仓的方法可以用下面: 如何创建GitHub仓库 及生成获取AccessToken&#xf…

大专生能不能学习鸿蒙开发?

目前安卓有2,000万的开发者。本科及以上学历占比为35%;iOS有2,400万开发者,本科及以上学历占比为40% 绝大多数的前端开发者都是大专及以下学历,在2023年华为开发者大会上余承东透露华为的开发者目前有200万,但鸿蒙开发者统计的数据…

wpf 数据转换(Bytes 转 KB MB GB)

效果 后端 using ProCleanTool.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data;namespace P…

Vscode移植到VS2010遇到的问题C++

如果在vscode能运行,就是C版本的问题,VS2010仅支持部分C11及以上的功能,仍然有一小部分不支持,但是他的警告信息和错误信息又很不明显,所以花了很多时间纠错。 总结: 看这三种for循环 for (const Product…

华为服务器资源查看npu-smi info、lscpu、lsblk

您可以通过以下命令来查看华为服务器的显卡资源: 查看CPU信息: lscpu该命令将会列出服务器的CPU信息,包括型号、频率、核心数等。 查看内存信息: free -h该命令将会列出服务器的内存信息,包括总内存容量、已使用内…

[论文笔记] PAI-Megatron 源码解读之Mistral的滑动窗口sliding window

这段代码是 _make_causal_mask 函数中处理滑动窗口局部注意力的部分。这里的目的是创建一个额外的掩码,以便在自注意力机制中只考虑每个位置附近的一定数量的位置,而不是所有之前的位置。这通常用于减少计算复杂性和提高长序列处理的效率。 代码分析如下: diagonal = past_k…

Python第三方扩展库Matplotlib

Python第三方扩展库Matplotlib Matplotlib 是第三方库,不是Python安装程序自带的库,需要额外安装,它是Python的一个综合性的绘图库,提供了大量的绘图函数用于创建静态、动态、交互式的图形和数据可视化,可以帮助用户创…

k8s 进阶实战笔记 | 应用的蓝绿、金丝雀发布笔记

文章目录 应用的蓝绿、金丝雀发布笔记应用升级策略停机升级滚动更新蓝绿发布金丝雀发布 应用的蓝绿、金丝雀发布笔记 应用升级策略 Deployment.spec.strategy 设置 Recreate:同时删除所有副本,停机升级策略 不存在新老版本共存 存在某个时间段服务不可…

并查集+巧妙分块,Codeforces1424B. 0-1 MST

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 Ujan has a lot of useless stuff in his drawers, a considerable part of which are his math notebooks: it is time …

Unity中使用Ultraleap的Slider组件

Unity中使用Ultraleap的Slider组件,实现物体在指定范围内滑动: 本节在上一节基础上进行,上一小结参考如下: Unity中使用Ultraleap的InteractionButton组件 本节工程文件如下: Unity中使用Ultraleap的Slider组件 1、在…

如何隐藏Selenium特征实现自动化网页采集

Selenium是一个流行的自动化网页测试工具,可以通过模拟用户在Chrome浏览器中的操作来完成网站的测试。然而,有些网站会检测浏览器是否由Selenium驱动,如果是,就会返回错误的结果或拒绝访问。为了避免这种情况,我们需要…

Linux编程 1/2 数据结构

数据结构: 程序 数据结构 算法 1.数据结构: 1.时间复杂度: 数据量的增长与程序运行时间增长所呈现的比例函数,则称为时间渐进复杂度函数简称时间复杂度 O(c) > O(logn)> O(n) > O(nlogn) > O(n^2) > O(n^3) > O(2^n) 2.空间复杂度: 2.类…

网络安全防御保护 Day4

要点一:防火墙的智能选路 就近选路: 在访问不同运营商的服务器时直接通过对应运营商的链路,以此来提高通信效率,避免绕路。 策略路由(PBR): 这是一种基于用户定义的策略(如业务需求、…

【MATLAB源码-第128期】基于matlab的雷达系统回波信号仿真,输出脉压,MTI,MTD等图像。

操作环境: MATLAB 2022a 1、算法描述 ​雷达(Radio Detection and Ranging)是一种使用无线电波来探测和定位物体的系统。它的基本原理是发射无线电波,然后接收这些波从目标物体上反射回来的信号。通过分析这些反射波&#xff0…

基于 MATLAB 语言的 BP 神经网络的改进算法

摘 要: 针对标准 BP 算法存在的缺陷, 本文给出了基于 MATLAB 语言的 BP 神经网络几种改进的算法. 阐述了各种 BP 算法的优化技术原理、优缺点, 并就它们的训练速度和内存消耗情况作了比较. 建议在多数 BP 神经网络训练 时, 先尝试使用 Levenberg- Marquardt 算法, 其次是 BFGS …

STM32的分类和选型

F系列(主要用于普通应用) STM32F0xx:低成本、低功耗,适用于成本敏感和低功耗的应用。STM32F1xx:中低端微控制器,具有丰富的外设和良好的性能。STM32F2xx:高性能微控制器,适用于要求…

二维数组的学习

前言 在前面我们学习了一维数组,但是有的问题需要用二位数组来解决。 二维数组常称为矩阵,把二维数组写成行和列的排列形式,可以有助于形象化的理解二维数组的逻辑结构。 一、二维数组的定义 二维数组定义的一般格式: 数据类型 数…

【英语趣味游戏】填字谜(Crossword)第2天

谜题出处 柯林斯字谜大全(6),Collins——Big Book of Crosswords (Book 6) Puzzle Number: 115 本期单词 横向 1、Fetch (8) 拿,取,8个字母 答案:Retrieve,取到,拿回 5、Common s…

C/C++笔记-使用mysql-connector-c连接mysql数据库

驱动在这个地方下载: MySQL :: Download MySQL Connector/C (Archived Versions) 我下载的是:mysql-connector-c-6.1.11-winx64 解压后lib有2个,一个是libmysql.lib一个是mysqlclient.lib 他们的区别如下: libmysql.lib 和 m…

elementui中的tree自定义图标

需求&#xff1a;实现如下样式的树形列表 自定义树的图标以及点击时&#xff0c;可以根据子级的关闭&#xff0c;切换图标 <el-tree :data"treeList" :props"defaultProps"><template #default"{ node, data }"><span class&quo…