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

同程面试:说下多态的实现原理?

来源: 责编: 时间:2023-11-16 09:38:26 415观看
导读前段时间朋友去同程旅行面试,被问到了一个看似简单,实则“有点东西”的问题:“了解多态的实现原理吗?”,所以今天我们就来聊一聊这个问题。和朋友的聊天截图:图片为了保护朋友隐私,所以这里只把咱们今天讨论的问题展示给大家

前段时间朋友去同程旅行面试,被问到了一个看似简单,实则“有点东西”的问题:“了解多态的实现原理吗?”,所以今天我们就来聊一聊这个问题。NYM28资讯网——每日最新资讯28at.com

和朋友的聊天截图:NYM28资讯网——每日最新资讯28at.com

图片图片NYM28资讯网——每日最新资讯28at.com

为了保护朋友隐私,所以这里只把咱们今天讨论的问题展示给大家,如果有需要整个面试题的,可以单独找我获取:gg_stone【备注:同程】NYM28资讯网——每日最新资讯28at.com

图片图片NYM28资讯网——每日最新资讯28at.com

1.回答误区

多态是面向对象编程中的一个重要特性,它主要是通过方法重写和方法重载来实现的。NYM28资讯网——每日最新资讯28at.com

但如果你面试的时候,给面试官说多态的实现原理是“方法重写和重载”,那你多半就凉凉了。因为“方法重写和方法重载”是多态的实现方式,但并不是它的实现原理。NYM28资讯网——每日最新资讯28at.com

2.什么是多态?

多态是面向对象编程中的一个重要概念,它允许通过父类类型的引用变量来引用子类对象,并在运行时根据实际对象的类型来确定调用哪个方法。换句话说,一个对象可以根据不同的情况表现出多种形态。NYM28资讯网——每日最新资讯28at.com

通过多态,我们可以利用父类类型的引用变量来指向子类对象,并根据实际对象的类型调用对应的方法。这样可以在不修改现有代码的情况下,动态地切换和扩展对象的行为。NYM28资讯网——每日最新资讯28at.com

多态有以下几个特点和优势:NYM28资讯网——每日最新资讯28at.com

  1. 可替换性:子类对象可以随时替代父类对象,向上转型。
  2. 可扩展性:通过添加新的子类,可以扩展系统的功能。
  3. 接口统一性:可以通过父类类型的引用访问子类对象的方法,统一对象的接口。
  4. 代码的灵活性和可维护性:通过多态,可以将代码编写成通用的、松耦合的形式,提高代码的可维护性。

3.实现原理

要了解多态的实现原理,需要先了解两个概念:动态绑定和虚拟方法调用。NYM28资讯网——每日最新资讯28at.com

3.1 动态绑定

动态绑定(Dynamic Binding):指的是在编译时,Java 编译器只能知道变量的声明类型,而无法确定其实际的对象类型。而在运行时,Java 虚拟机(JVM)会通过动态绑定来解析实际对象的类型。这意味着,编译器会推迟方法的绑定(即方法的具体调用)到运行时。正是这种动态绑定机制,使得多态成为可能。NYM28资讯网——每日最新资讯28at.com

3.2 虚拟方法调用

虚拟方法调用(Virtual Method Invocation):在 Java 中,所有的非私有、非静态和非 final 方法都是被隐式地指定为虚拟方法。虚拟方法调用是在运行时根据实际对象的类型来确定要调用的方法的机制。当通过父类类型的引用变量调用被子类重写的方法时,虚拟机会根据实际对象的类型来确定要调用的方法版本,而不是根据引用变量的声明类型。NYM28资讯网——每日最新资讯28at.com

3.3 实现原理综述

所以,多态的实现原理主要是依靠“动态绑定”和“虚拟方法调用”,它的实现流程如下:NYM28资讯网——每日最新资讯28at.com

  1. 创建父类类型的引用变量,并将其赋值为子类对象。
  2. 在运行时,通过动态绑定确定引用变量所指向的实际对象的类型。
  3. 根据实际对象的类型,调用相应的方法版本。

以上就是多态的实现原理。NYM28资讯网——每日最新资讯28at.com

小结

面向对象的特征:封装、继承和多态,其中多态的面试问题最多,而多态的实现原理看似简单,实在需要了解 JVM 层面的一些知识(动态绑定和虚拟方法调用)才能回答好,所以这也侧面说明了一个问题,想要拿到好的 Offer 和薪资,一定要提前准备才行。NYM28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-26537-0.html同程面试:说下多态的实现原理?

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

上一篇: Java反射与注解:揭开类加载与运行时动态特性

下一篇: 令人期待的 CSS 新功能:让编码更高效

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    日前iQOO手机官方宣布,新一代电竞旗舰iQOO 11S将会在7月4日19:00正式与大家见面。随着发布时间的日益临近,官方关于该机的预热也更加密集,截至目前已
Top