当前位置:首页 > 科技  > 软件

八股文-如何理解Java中的多态

来源: 责编: 时间:2023-11-30 09:30:26 390观看
导读什么是多态?多态是面向对象编程的一个重要概念,它允许一个对象以不同的形式表现。也就是说,在父类中定义的属性和方法,在子类继承后,可以有不同的数据类型或表现出不同的行为。这可以使得同一个属性或方法,在父类及其各个子

什么是多态?

多态是面向对象编程的一个重要概念,它允许一个对象以不同的形式表现。也就是说,在父类中定义的属性和方法,在子类继承后,可以有不同的数据类型或表现出不同的行为。这可以使得同一个属性或方法,在父类及其各个子类中,可能会有不同的表现或含义。主要包括两种类型:编译时多态(静态多态)和运行时多态(动态多态)。0oi28资讯网——每日最新资讯28at.com

  1. 编译时多态(静态多态)

主要体现在方法的重载和重写。方法的重载是在同一个类中,允许定义多个同名方法,但参数列表不同;方法的重写发生在继承关系中,子类可以覆盖父类的方法。0oi28资讯网——每日最新资讯28at.com

  1. 运行时多态(动态多态)

主要通过对象的多态性和动态绑定实现。引用变量的类型可以是其父类,但在运行时实际引用的是其子类的对象,从而调用子类的方法。0oi28资讯网——每日最新资讯28at.com

必要条件:0oi28资讯网——每日最新资讯28at.com

  • 继承或者实现接口
  • 子类重写父类的方法
  • 父类的引用指向子类的对象

多态的实现原理

多态的实现原理涉及到动态绑定和虚拟方法调用。这两个概念有助于理解在运行时如何实现多态性。0oi28资讯网——每日最新资讯28at.com

  1. 动态绑定(Dynamic Binding)

动态绑定是多态性的基础,它使得在运行时能够确定对象的实际类型,并调用相应类型的方法。在Java中,动态绑定是通过虚拟方法表(Virtual Method Table,VMT)来实现的。0oi28资讯网——每日最新资讯28at.com

每个类在Java中都有一个与之相关联的虚拟方法表,表中存储了该类的方法的地址。当对象被创建时,会在内存中分配一个虚拟方法表,这个表指向该对象的实际类型的方法地址。0oi28资讯网——每日最新资讯28at.com

在运行时,当调用一个对象的方法时,通过对象的引用变量找到虚拟方法表,然后根据方法的签名(名称和参数类型)找到相应的方法地址。这个过程是动态的,因为它发生在运行时,根据对象的实际类型来确定调用的方法。0oi28资讯网——每日最新资讯28at.com

  1. 虚拟方法调用

虚拟方法调用是指在运行时调用对象的方法,而不是在编译时确定调用的方法。在Java中,所有的非私有、非静态、非 final 的方法都是虚拟方法。0oi28资讯网——每日最新资讯28at.com

  1. 实现流程
  • 创建对象:在运行时,根据代码中的 new 关键字等创建对象的语句,会在内存中为对象分配空间。
  • 动态绑定:当对象被创建时,会在内存中分配一个虚拟方法表(VMT)或类似的机制,用于存储对象的方法地址。这个表与对象的实际类型相关联。
  • 引用变量赋值:引用变量指向对象。在多态中,父类类型的引用变量可以指向子类对象。
  • 虚拟方法调用:当调用对象的方法时,引用变量根据实际类型找到对象的虚拟方法表,然后根据方法的签名找到相应的方法地址。这个过程是动态的,发生在运行时。
  • 执行方法:最终执行找到的方法。如果是子类对象,执行的是子类中重写的方法。

整个流程中,关键点在于动态绑定和虚拟方法调用。动态绑定使得在运行时能够确定对象的实际类型,而虚拟方法调用使得在运行时能够调用对象的实际类型中的方法.0oi28资讯网——每日最新资讯28at.com

多态在实际生产中的应用

  • 代码的灵活性和可维护性

多态性使得代码更加灵活,能够适应不同的场景和需求。通过使用多态性,可以降低代码的耦合度,提高代码的可维护性和可读性。0oi28资讯网——每日最新资讯28at.com

  • 接口和抽象类的应用

接口和抽象类是实现多态的重要手段。通过定义接口和抽象类,可以在不同的类中实现相同的接口或继承相同的抽象类,从而统一对这些类的处理。0oi28资讯网——每日最新资讯28at.com

  • 方法回调

多态性在事件处理和回调机制中有广泛应用。通过定义回调接口,不同的类可以实现相同的接口,从而在特定事件发生时调用不同类的方法。0oi28资讯网——每日最新资讯28at.com

  • 集合中的多态

Java中的集合类(如List、Map)经常使用多态性,允许存储不同类型的对象,使得代码更加通用和灵活。0oi28资讯网——每日最新资讯28at.com

  • 框架和设计模式

多态性是许多设计模式(如策略模式、工厂模式)和框架的基础。通过设计接口和抽象类,框架能够与不同的实现交互,实现更高层次的灵活性和可扩展性。0oi28资讯网——每日最新资讯28at.com

总结

多态性使得同一类型的对象在不同情境下表现出不同的行为,从而提高了代码的灵活性和可维护性。编译时多态主要在编译阶段确定调用哪个方法,而运行时多态则在运行时确定调用哪个方法。这种灵活性使得程序能够更容易地适应变化,同时提高了代码的可扩展性。0oi28资讯网——每日最新资讯28at.com


0oi28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-35339-0.html八股文-如何理解Java中的多态

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 揭秘Java三宝:final,static,volatile,面试中的关键字秘籍!

下一篇: 再也不怕面试官问watch、computed、watchEffect的区别了

标签:
  • 热门焦点
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
Top