面向对象之多态

新手小白学JAVA 面向对象之多态 4 多态 4.1 概念 多态指同一个实体同时具有多种形式 它是面向对象程序设计(OOP)的一个重要特征。 主要是指同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。 好处是:可以把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。 水果有两种形态:水果和苹果,不关心买回来的是苹果还是西瓜,只要是水果就行 class Animal{//1.定义父类Animal …eat(){syso(“吃啥都行”)} } class Cat exte 阅读详情

@(笔记)[面向对象|MarkDown|我的博客]
07.13

面向对象之多态

多态

相同的行为,不同的实现

多态多态,多种状态,而多种状态的体现就在不同的实现上面,也可以说是不同的效果.
举个例子:
我这里有3个杯子,里面都装了白酒,你并不知道它们都是什么酒,只有等你喝过之后才能知道,第一个杯子是二锅头,第二个是五粮液,第三个是茅台.

Maotai mo = new Maotai();
Wine w = mo;

这里我们可以这样理解,茅台是酒类的一种,它们之间是继承关系,当 a 指向了 mo这个对象的时候,它会自动向上转型为 Wine,这也就是说w是可以指向茅台这个实例.

这样做的好处就是,在继承中我们知道子类是父类的扩展,它可以提供比父类更加强大的功能,如果我们定义了一个指向子类的父类引用类型,那么它除了能够引用父类的共性外,还可以使用子类强大的功能

但是向上转型存在一些缺憾,那就是它必定会导致一些方法和属性的丢失,而导致我们不能够获取它们

所以对于多态我们可以总结如下:
- 指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用这些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。
不过还是可以调用子类中特有的方法,后文中将会讲到.

  • 对于面向对象而已,多态分为编译时多态和运行时多态。

    • 编辑时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数,在运行时谈不上多态。
    • 运行时多态是动态的,它是通过动态绑定来实现的,也就是我们所说的多态性。

多态的分类

  1. 静态多态(编译期确定要执行的效果,编译器只是做语法检查)
    • 重载 (Overload)实现
  2. 动态多态(编译期不知道运行效果,而是运行期根据绑定对象的不同确定结果)
    • 重写 (Override)
    • 动态绑定

当一个父类引用指向子类对象的时候
为什么父类不能调用子类重载之后的方法?为什么父类调用的方法的实现是子类重写后的实现?
- 因为重载是对于一个类而言的,当子类继承父类,然后在本类中重载了父类的这个方法,对于父类而言是看不到这个在子类中重载之后的方法的,因为它只属于子类,所以当父类调用这个方法的时候,因为父类中根本就没有这个方法,所以编译器会报错;
- 然而当父类调用被子类重写的过后的方法时,因为父类中存在同名方法,编译器不会报错,然后通过动态绑定,将被调用的这个方法和子类关联起来,所以方法实现的是子类重写过后的效果.

动态绑定
  • 将一个方法调用与该方法所在的类关联起来;
  • 在运行时候根据具体对象的类型绑定;
  • 当父类引用指向子类的对象,调用重写的方法时,是调用子类中重写的方法;
转型技术(类之间必须要有继承关系)

左右两边数据类型不一致

  • 向上转型 –>自动
    Person p = new Man();
    此时的引用 p 只能看见父类的方法,而看不到子类所特有的方法
  • 向下转型 –>强制
    Man m = (Man)p
    此时m引用可以看到全部的方法,因为m指向了一个Man对象.
    这样就可以调用子类对象中访问修饰符允许的方法和属性了

多态的引用–异构集合

创建一个不是同一类型,但是有共同父类的数据集合,不同对象的集合称为异构集合

多态的好处和弊端:

A:好处
提高了程序的可维护性和可扩展性。
维护性:继承保证
扩展性:多态保证
B:弊端
父类/父接口不能访问子类特有功能。

多态的体现形式:

  • 具体类多态
    class Fu {}
    class Zi extends Fu {}
    Fu f = new Zi();
  • 抽象类多态
    abstract class Fu {}
    class Zi extends Fu {}
    Fu f =  new Zi();
  • 接口多态
    interface Inter {}
    //接口的实现类命名:接口名+Impl
    class InterImpl implements Inter{}
    Inter i = new InterImpl();

总结

  • 使用父类类型的引用指向子类的对象;
  • 该引用只能调用父类中定义的方法,不能调用子类的特有的属性和方法;
  • 如果子类中重写父类的方法,那么调用该方法,将会调用子类中重写后的实现;
  • 在多态中,子类可以调用父类的所有非私有方法;
  • 父类的引用可以指向子类的对象,子类的引用不能指向父类的对象;
AJ-Report开源数据大屏存在远程命令执行漏洞 该平台可以通过post方式在validationRules参数对应值中进行命令执行,可以获得服务器权限,登陆管理后台接管大屏。如果被攻击者利用,危害后果十分严重。 阅读详情

相关推荐

C语言 函数

一、什么是函数 二、函数的相关语法 三、函数编码规范

m0_57105760的博客 1891

SV类的继承与多态例子理解

父类有2个方法A和B,均不是虚方法,且A中调用B。则,在子类中调用A方法时,最终会调用父类的B方法。子类继承父类,在子类中,重写B方法。

qq_41847675的博客 256

SpringBoot 通过 JMS 集成 IBM MQ

IBM MQ 作为老牌的企业级消息中间件,虽然在当下云原生时代已不再是主流选择,但在金融、银行、保险等传统行业的核心业务系统中仍然占据着重要地位。这些行业对系统的稳定性、可靠性和事务一致性有着极高的要求,IBM MQ 正是在这些方面表现出色。尽管近年来 RabbitMQ、Apache Kafka 等新一代消息中间件在新兴项目中更受欢迎,但许多金融公司和大型企业仍在使用 IBM MQ 作为核心业务系统的消息传递基础设施。

小单的博客专栏 952

SV--类的多态练习(8/24)

本次练习主要针对class多态的继承进行的简单知识点梳理和理解

创芯人--fly的博客 462

Win11任务栏图标消失?快速恢复指南

任务栏图标消失是Windows 11操作系统中常见的问题之一,但通过上述方法,用户通常可以轻松解决这一问题。无论是重启Windows资源管理器、使用命令提示符修复、检查系统更新和设置,还是考虑重装系统,都可以帮助用户恢复任务栏图标的正常显示。希望本文的介绍能对用户有所帮助,让Windows 11的使用更加顺畅和愉快。

mmoo_python的博客 5411

GDI文字绘制和windows下opengl文字绘制小结

GDI绘制文字,要设置文字的属性,主要就是通过设置DC中的font对象来实现的。 font对象的创建可以由createfont()、createfontIndirect()来实现。 HFONT CreateFont( int nHeight, // height of font int nWidth, // average

T_W_S的专栏 5323

(七)SV类的封装、继承、多态

SV学习

一个粉尘的成长博客 3573

CAPL编程规范与最佳实践

通过本文的学习,读者应该对CAPL编程规范与最佳实践有了初步的了解,并能够编写高质量的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1748

system verilog基础知识总结与复习(SV中的类)

四、SV中的类 1、SV中OOP的术语及定义 类(class):类是包含变量和子程序的基本构建块,在verilog中对应的是module。 对象(object):类的实例。 句柄(handle):指向对象的指针。句柄就像对象的一个地址,通过改地址访问对象。 方法(method):任务或函数中操作变量的程序性代码。 2、一个类包含哪些东西? 怎么创建并使用一个类? 一个普通的类包含属性(成员变量)和方法,创建一个类可...

silva_94的博客 7332

4、基于STM32 NUCLEO - F030R8开发板的嵌入式编程入门

本文详细介绍了如何在STM32 NUCLEO-F030R8开发板上实现LED闪烁功能,作为嵌入式编程的入门实践。内容涵盖开发板组成、跳线设置、项目创建、代码编写与解析、编译运行步骤,以及常见问题解决方法和拓展应用。通过本文学,习者可以掌握嵌入式开发的基本流程,并为后续深入学习打下基础。

m9n0o的博客 83

LangGraph 实战教程:搭建一个智能办公多Agent协作平台

只存储必要的信息:不要把所有的原始数据都存储在状态中,比如销售数据可以存储在数据库或向量数据库中,状态中只存储数据的 ID 或摘要。使用类型提示:避免类型错误,提高代码的可维护性。支持增量更新:LangGraph 默认支持状态的增量更新(通过reduce函数),比如messages列表可以通过追加新消息的方式更新,而不是每次都重新创建整个列表。Normal Edge 的定义非常简单,只需要在StateGraph对象(稍后会详细讲解)上调用add_edge# 创建一个 StateGraph 对象。

SuperAGI2025 221

SV学习笔记—类的封装和继承

1.类的封装 面向对象(OOP)编程的核心思想就是封装,封装就是指将对象的属性和方法封装起来,类就是这个封装的载体。通过封装可以将程序实现细节隐藏起来,并通过public/protected/local决定类的属性是否可以被用户使用。 1.1 类与结构体的异同(封装) 相同点:二者都可以类比为容器,都可以定义数据成员 不同点:1.class除了可以声明数据变量成员(属性),还可以声明方法(function/task);而struct只能声明数据变量,不能声明方法 2:class变量声...

不定期分享IC验证学习笔记 2677

matlab 点云泊松盘采样

本文介绍了泊松盘采样算法在三维点云处理中的应用。该算法通过最小间距约束(任意两点距离≥r)和均匀分布特性,生成高质量、均匀分布的点集。文章详细阐述了参数设置(如采样半径、候选点数),并与体素栅格、随机采样等方法进行了对比。代码实现部分展示了MATLAB版本的泊松盘采样算法,包括KD树加速和候选点生成机制。实验结果表明,该方法能有效保持点云特征,适用于点云简化、曲面重建等场景。文中还提供了参数调整建议和不同应用场景下的使用指导。

点云侠的博客 537

面向对象——多态

1. 多态概念        多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。        可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。 多态的主要用途 1、提高程序的可扩展性; 2、降低系统耦合度; 3

杨思默 3133

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

什么是多态?面向对象中对多态的理解

多态(Polymorphism)是面向对象编程(OOP)中的一个核心概念,它允许对象以多种形式出现。多态性使得同一个接口可以用于不同的数据类型,从而使得代码更加灵活和可扩展。简单来说,多态就是一个接口,一个类,一个抽象类,一个类里面的方法,不同类的同一个方法,都可以有多种实现,这个在面向对象里面,就对应着继承、重载、重写等具体的方式。灵活性:多态性允许同一个接口用于不同的对象,从而使得代码更加灵活。可扩展性:可以在不修改现有代码的情况下,通过添加新的类来扩展程序的功能。

fefdfg的博客 1733

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

面向对象——多态详解

多态(Polymorphism)属于面向对象的三大特征之一,它的前提是封装形成独立体,独立体之间存在继承关系,从而形成多态机制。多态是同一个行为具有多个不同表现形式的能力。多态就是“同一个行为”发生在“不同对象上”会产生不同的效果。多种形态,多种状态,编译和运行有两个不同的状态编译期叫做静态绑定运行期叫做动态绑定现在我们再来回顾面向对象的三大特征:封装、基础、多态他们之间的关系是一环扣一环首先得封装成一个整体才有了继承的概念有了继承关系才有了多态的实现 ......

shouyeren_st的博客 1634

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

面向对象—多态

多态

qq_44346427的博客 3844

【多态】面向对象之多态实例代码

【多态】面向对象之多态实例 对象: 主人 行为:喂养宠物 宠物(父类) 行为:吃XXX 猫(子类) 行为:吃鱼 狗(子类) 行为:吃骨头 实例代码: 1.无多态实例代码 public class Master{ public void feed( Cat cat){ cat.eat(); } public void feed(Dog dog){ dog.eat();...

qq_40284440的博客 578

面向对象的三大特征之一多态

1. 什么是多态 多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。 对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。 简单的说就是 在通过父类来获取他名下继承

qq_28629389的博客 1819

面向对象设计领域中的参数多态,包含多态,过载多态和强制多态

在面向对象设计中,多态性是一个重要的概念,它允许我们以一种统一的方式处理不同类型的对象,并根据对象的实际类型来执行相应的行为。通过将具体的对象看作是其父类或接口的实例,并在方法调用时根据实际的对象类型来确定具体的执行逻辑,我们可以以一种统一的方式处理不同类型的对象。- 当方法需要操作的对象类型不确定时,可以使用多态来接受不同类型的对象,减少代码的重复。使用场景: - 当需要执行类似的操作,但操作的参数类型或个数可能不同时,可以使用过载多态来定义多个方法,使得代码更清晰、简洁,并提高代码的可读性。

辣香牛肉面的博客 1468

面向对象的多态

多种形态,总的来说:同一件事情,发生在不同对象身上,就会产生不同的结果。1.2.3.完成以上3部分会发生动态绑定(是多态最基础的)实际就是创建一个子类对象,将其当成父类对象来使用。

forwkard__的博客 1080

面向对象-多态性

 面向对象的软件开发语言具有三个重要的特点分别为封装性、继承性、多态性。封装性即意味着对象封装其内部的数据,使其对外不可见,以保证数据的安全性。继承性是代码复用的一个很好的解决方案,但是继承关系是编译器在编译阶段就为所有的对象决定的,因而在软件工程过程中,继承性太过死板,存在很大的局限性。而多态性,它是将多种不同的特殊行为进行抽象的一种能力,通过结合继承性,多态性很好地解决了OO遇到的很多麻烦

闪亮每一天 3869

面向对象理解——多态

何为多态

LYQ 1万+
上一篇: 面向对象之继承
下一篇: 面向对象之抽象和接口
dong4go
博客等级 码龄12年 5粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值