Java面向对象—多态

JAVA面向对象多态 向上转型是 “抽象化”(用父类统一接口),向下转型是 “具体化”(还原子类特性)。向上转型的本质是 **“缩小” 对象的访问范围 **:父类引用仅能调用父类声明的接口(方法 / 变量),但对象的实际类型仍是子类(可通过。即使父类引用实际指向子类 A 的对象,也无法直接转为子类 B 的类型(除非子类 B 是子类 A 的子类)。(包括重写的方法和子类特有的方法),行为与直接创建子类对象一致。(4)编译类型看定义时=号的左边,运行类型看=号的右边→_→。(3)要求父类的引用必须指向当前的目标类型的对象。 阅读详情

1、多态:

具有表现多种形态能力的特征。

也就是说同一个接口,使用不同的实例化执行后得到不同的结果。

在java中,有继承关系存在时,当父类的引用指向子类的对象时,可以通过父类的引用调用子类重写的方法,实现多态。

2、多态的特点:

(1)继承的存在(没有继承就没有多态)

(2)子类中重写父类的方法(多态下调用的是子类中重写的方法)

(3)父类引用变量指向子类对象(子类到父类的转型)

3、案例:

现有Pet类中有宠物吃东西的方法eat(),有Dog和Cat两个子类继承了Pet类。重写Pet类中的eat()方法,有一个主人类Master。在该类中有喂养宠物的功能food()。实现主人喂养宠物。

在该案例中,我们会发现,主人给一个宠物喂食就需要写一个food()。如果宠物很多,那么food()也会有很多,代码冗余就很高,要解决这个问题,就可以使用多态来处理。

使用多态来实现该案例:

总结:多态就是子类继承父类,通过父类类型(引用)指向子类对象。执行相同的方法,结果却不一样。

多态的前提: 1、继承的存在(没有继承就没有多态) 2、子类中重写父类的方法(多态下调用的是子类中重写的方法) 3、父类引用变量指向子类对象(子类到父类的转型)

4、子类到父类的转型(向上转型)

父类类型    子类对象
Pet pet = new Dog();

(1)能调到什么左边决定,执行结果是什么右边决定

(2)pet能调到的方法必须是Pet中定义过的,调用时,先找子再找父,找到为止

(3)父类引用调到的是子类中重写后的方法,不是父类中的方法

(4)父类引用调不到子类特有的方法

(5)属性不具有多态性

5、父类到子类的转型(向下转型)

父类类型调不到子类中独有的方法,如果非要调子类的方法呢?就可以通过类型转换实现。

总结:如果想要父类引用能调到子类中独有的方法,那么就要对父类引用做转型,转为子类类型。也就是向上转换(强转)。

转为子类类型后就可以调到子类独有的方法了。

那么如果还想调另一个子类中独有的方法呢,我们会想到再进行类型转换,转为另一个子类类型。

接下来我们来看看是否可以?

结果发现执行报错了:类投射异常。

说明类型转换出了问题。在之前我们已经把父类引用转为了Dog类型。再转为Cat就转不了。因为Dog和Cat是同一级别。所以转换不了。

6、instanceof运算符

在Java中提供了instanceof运算符来进行类型的判断。

语法:

对象 instanceof 类或接口;

该运算符用来判断一个对象是否属于一个类或实现了有一个接口,结果为true或false。

在强制类型转换之前通过instanceof运算符检查对象的真实类型,然后再进行相应的强制类型转换,

这样可以避免类型转换异常,从而提高代码健状性。

7、父类类型做形参实现多态

现在增加一个主人给宠物喂食的功能,在主人类Master中,如果给狗狗喂食,就写一个food方法,传入狗狗对象。实现给狗狗喂食。给猫喂食也是一样,但是如果宠物很多,那么该类中就会有很多food方法。

所以我们就把传给food的参数改为父类类型:

在调用方法时传入子类对象,也相当于是父类到子类的转型实现了多态

8、案例练习:

(1)创建Person类,类中属性和方法如类图。创建Student类和Teacher类继承Person类。对Person中的show()方法进行重写。创建Test01进行测试父类到子类的转型和子类到父类的转型。

(2)再创建一个User类,类中有人工作的方法work();通过使用父类类型做形参来实现多态。创建Test02进行测试父类类型做形参实现多态。

9、父类类型作返回值实现多态

在Pet——Dog and Cat的基础上,增加一个宠物商店PetAgree类,类中有购买宠物的方法Buy(),该方法的返回值类型是父类类型Pet。在方法中可以返回子类对象。也相当于是父类到子类的转型来实现多态。

10、Object类型数组

java面向对象多态练习 1 (多态)定义榨汁机JuiceMachine 有榨汁方法makeJuice,传入相应的水果。 如果传入的是Apple 输出 “流出苹果汁” 传入的是Orange 输出 “流出橙汁” 传入的是Banana 输出 “流出香蕉酱” abstract class Fruit{ abstract void makeJuice(); } class JuiceMachine{ public s... 阅读详情

相关推荐

51单片机定时器的原理、应用与编程实现

本文系统介绍了51单片机定时器的基本原理与应用。首先阐述了定时器的工作原理,包括定时模式和计数模式的区别。然后详细讲解了定时器的四种工作模式(方式0-方式3)及其适用场景,并分析了相关寄存器(TMOD、TCON、THx/TLx)的功能设置。文章还给出了定时器编程的具体步骤,包括初始化、计数初值计算和示例代码。最后通过LED闪烁、PWM波形产生、脉冲计数等实际应用案例,展示了定时器的多样化应用。掌握这些知识对嵌入式系统开发具有重要意义。

2501_91227323的博客 1521

【JAVA】面向对象三大特性之多态

本文深入解析Java多态的核心概念与实现机制。多态作为面向对象编程三大特性之一,通过继承体系下的方法重写实现"一个接口,多种实现"的效果。文章详细阐述了多态的实现条件(继承、重写、父类引用调用),并通过动物类继承体系代码示例演示了多态的具体应用。同时对比了方法重写与重载的区别,解释了静态绑定与动态绑定的原理。此外,文章还系统介绍了向上转型(子类对象作为父类使用)和向下转型(父类引用还原为子类对象)的转换机制及使用场景,特别指出了向下转型的安全隐患及instanceof操作符的解决方案。全

m0_68002296的博客 704

从USB相机标定到Aruco码精准定位:基于aruco-ros的机器人视觉实践

本文详细介绍了基于aruco-ros的机器人视觉实践,从USB相机标定到Aruco码精准定位的全流程。通过实战案例和优化技巧,展示了Aruco码在机器人导航中的高精度位姿识别能力,帮助开发者快速实现毫米级视觉定位系统。

weixin_27310417的博客 487

【Java】面向对象:继承、组合和多态

面向对象三大特征之继承和多态

trong_ 的烂笔头 1553

ICM42670-P嵌入式开发实战:从寄存器配置到姿态解算全解析

本文全面解析ICM42670-P高性能6轴MEMS运动传感器的嵌入式开发实战,涵盖寄存器配置、数据采集滤波、低功耗优化及姿态解算算法。通过详细代码示例和应用案例,帮助开发者快速掌握从硬件对接到姿态跟踪系统的完整开发流程,适用于可穿戴设备和智能家居等低功耗应用场景。

gold的博客 1064

CST入门——0. 安装CST Studio Suite 2022

安装CST Studio Suite 2022详细操作步骤

plmxu34的博客 6万+

基于Java的面向对象的多态示例

这些Java示例完整展示了面向对象多态性的核心概念,同时体现了Java语言特性(如接口、抽象类、注解等)。通过合理运用多态性,可以设计出高内聚、低耦合的软件系统,符合面向对象设计原则(OODP)。必须保持方法签名一致(参数类型、顺序、数量)

darkhorsefly的专栏 896

WCK Operation (WCK 操作)

LPDDR6 SDRAM采用双时钟系统(WCK和CK),其中WCK频率是CK的两倍。为确保数据正确传输,需通过WCK2CK同步操作使两种时钟对齐。LPDDR6支持两种同步模式:Auto-sync off模式和WCK Always on模式,可通过MR22寄存器选择。同步操作由特定命令(Read/Write/MRR等)触发,需在满足特定时序参数(如tWCKENL、tWCKPRE等)后完成。同步前必须完成WCK2CK训练,且不同操作(读取/写入/CAS)有各自的时序要求。该机制确保数据在正确时钟相位下传输,是L

李家小院 649

初识JAVA-面向对象的三大特征之多态

多态,简单来说就是多种形态,复杂点说就是不同对象去完成某个行为时产生不同的状态。 总的来说:同一件事情,发生在不同对象上,就会产生不同的结果。

2301_76928097的博客 1885

YOLOv8改进 | Conv篇 | 轻量级下采样方法ContextGuided(大幅度涨点)

ContextGuided通过创新的局部-全局协同机制,解决了传统下采样方法中细节丢失与上下文缺失的核心痛点。实验证明其在YOLOv8上可实现最高2.6%的mAP提升,且计算开销增加不足5%。这种即插即用的设计为实时目标检测系统提供了新的优化方向。创新启示:轻量化不代表简单裁剪,智能信息融合才是未来方向!下一步探索与Transformer结合构建混合架构多尺度上下文融合机制3D点云中的扩展应用资源获取完整训练代码:[GitHub链接]预训练模型:[Google Drive链接]讨论话题。

QQ_778132974的博客 288

YOLO11 改进、魔改|分组残差自注意力GRSA,通过分组残差优化 QKV 计算、指数空间映射优化位置偏差,在大幅降低自注意力模块参数和计算量的同时,增强特征关系与位置信息的表征能力

【摘要】研究人员提出GRSA(分组残差自注意力)机制,解决Transformer在图像超分辨率任务中效率与性能难以兼顾的问题。GRSA通过分组残差层减少自注意力参数冗余,同时采用指数空间相对位置偏差优化位置信息表征。实验表明,GRSA在降低50%参数量的同时保持模型性能,适用于目标检测和图像分割任务。在YOLO系列模型中集成GRSA可提升小目标检测精度,代码实现已开源,详细部署教程见相关视频与GitHub资源。该机制为轻量化Transformer模型提供了高效解决方案。

qq_64693987的博客 793

java 多态_Java面向对象 —— 多态

前两天已经相继介绍了Java面向对象的三大特性之中的封装、继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~首先讲一下什么是多态,以及多态需要注意的细节 什么是多态:一个对象具备多种形态,也可以理解为事物存在的多种体现形态(父类的引用类型变量指向了子类对象,或者是接口的引用类型变量指向了接口实现类的对象) 多态的前提:必须存在继承或者实现关系。 多态要注意的细节:多态情况下,子父类存...

weixin_39931362的博客 93

告别定位不准!Inner-IoU助力YOLOv11边界框回归精度飙升

Inner-IoU 凭借辅助边框的创新设计,成功解决了传统 IoU 损失在小目标、遮挡场景下的收敛难题,为 YOLOv11 注入了更强的定位能力。从原理剖析到代码集成,本教程已为你铺就了一条“精度提升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“精度优异”的答卷——相信我,当你看到检测框精准贴合目标的那一刻,你会明白这份尝试的价值。

FJN110的博客 188

Java面向对象与多态

在前面学习到的接口和继承中,如果父类只能使用父类的方法,子类可以使用父类和自己的方法,但是有时需要使用父类调用子类重写的父类方法,上面的思路就不再合适,此时就可以使用多态。多态的特点:使用父类引用指向子类的对象,此时父类可以调用子类重写父类的方法,但是调不到子类特有的成员访问成员变量时:看赋值符号左侧是子类还是父类,如果是父类,调用就是父类成员变量,否则调用的是子类成员变量访问成员方法时:看new。

小何代码咖啡馆 1129

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Java面向对象】多态的详细介绍,简单易懂,看这一篇就够了

方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础之上的。简单来说,多态是具有表现多种形态的能力的特征。

Ceylan__的博客 2796

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java面向对象的多态_JAVA面向对象的多态是个什么东西?

面向对象的三大特征:封装、继承、多态。在前面已经说了过了封装和继承。今天就来聊聊剩下的多态。多态,从字面内容来看,就是多种形态,多种状态。在java的面向对象中可以从以下两个方面来讲。01不同子类之间的多态在前面我们说继承的时候说到,子类可以继承到父类的方法,继承后可以对方法进行重写。这个时候就会有不同的子类重写的功能是不同的。我们来举个例子,父类是动物类,有一个叫的方法。然后定义两个子类继承自这...

weixin_42416119的博客 180

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java面向对象多态_Java面向对象的多态

Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态引用多态的含义就是:父类的引用可以指向它本类的对象,不仅如此父类的引用还可以指向子类的对象,这就是引用多态用简单的代码来看一下引用多态的含义:动物类:Animal1 public classAnimal {2 publicAni...

weixin_31838473的博客 404

Java面向对象之多态,向上转型我们大家庭的由来

Java面向对象之多态的深度解剖~~~我们大家庭就要来啦~

一年,我很需要这一年 1817

java面向对象多态性_Java 面向对象特性之多态性

多态性面向对象(OOP)三大特性:封装、继承、多态。多态性(polymorphism)指同一行为具有多种不同表现形式,在面向对象程序设计中表现为同一消息可以根据发送对象的类型不同,做出多种不同的行为。多态性的优点多态性能够从一定程度上消除类型之间的耦合关系,通过统一接口方式,不同类的对象可以直接替换,程序更加灵活,可扩展。面向对象多态性存在的三个必要条件继承重写父类引用指向子类对象多态性的实现方式...

weixin_30539081的博客 260

Java面向对象三大基本特征之多态

Java面向对象三大基本特征之多态

lv121218的博客 1628

Java面向对象特征之三——多态

Java面向对象特征之三:多态 多态性是指允许不同类型的对象对同一消息做出相应。具有灵活性、抽象、行为共享、代码共享的优势,共享就意味着最大化利用和简洁,还有就是加载速度。 一、多态的作用 消除类型之间的耦合关系。即同一事件发生在不同的对象上会产生不同的结果。 二、多态的理解 1.多态是同一个行为具有多个不同表现形式或形态的能力。 2.多态就是同一个接口,使用不同的实例而执行不同操作。 3....

wangkailili的博客 723

java 多态判断非空_Java面向对象 —— 多态

前两天已经相继介绍了Java面向对象的三大特性之中的封装、继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~首先讲一下什么是多态,以及多态需要注意的细节 什么是多态:一个对象具备多种形态,也可以理解为事物存在的多种体现形态(父类的引用类型变量指向了子类对象,或者是接口的引用类型变量指向了接口实现类的对象) 多态的前提:必须存在继承或者实现关系。 多态要注意的细节:多态情况下,子父类存...

weixin_39690963的博客 93

12 Java面向对象之多态

JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类  1. 静态多态:在编译期间,程序就能决定调用哪个方法。方法的重载就表现出了静态多态。  2. 动态多态:在程序运行期间,才能决定调用对象的哪个方法。在继承中,父类对象引用指向子类对象。 动态多态的特点 父类对象可以将引用指向子类对象,也可以指向本类对象。...

weixin_34049032的博客 122

JAVA面向对象之多态

面向对象----多态 多态的前提: 1.必须有以下关系:继承、实现 2.通常都会有重写 多态的好处: 提高程序的扩展性 多态的弊端: 通过父类引用操作子类对象时,只能使用父类中已有的方法,不能操作子类特有的方法。 多态的体现: 父类的引用或接口的引用指向了自己的子类对象 多态转型 当父类的引用* 指向子类对象时,就发生了向上转型,即把子类类型对象转成了父类类型。向上转型的好处是隐藏了子类类型,提高了代码的扩展性。 但向上转型也有弊端,只能使用父类共性的内容,而无法使用子类特有功能,功能有限制。 下面举一个例

weixin_43633742的博客 155

Java面向对象三大特征(封装,继承,多态)

什么是多态?多态是在继承、实现情况下的一种现象,表现为:对象多态、行为多态。多态体现为父类引用变量可以指向子类对象。比如:Teacher和Student都是People的子类,代码可以写成下面的样子。

szm0225的博客 1902

Java面向对象基础之多态

小结 子类可以覆写父类的方法(Override),覆写在子类中改变了父类方法的行为 Java的方法调用总是作用于运行时期对象的实际类型,这种行为称为多态 覆写(Override):在继承关系中,子类如果定义了一个与方法签名(方法的名称和参数类型)完全相同的方法 class Person{//例如我们在父类中定义了run()方法 public void run(){ ...

loving coding 574
上一篇: Java面向对象—继承
下一篇: Java面向对象—接口
得闲饮茶呃
博客等级 码龄4年 303粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值