从hotspot源码层面剖析Java的多态实现原理

本文由子牙老师撰写,探讨了JVM和C++中多态的实现原理,重点讲解了虚表的概念及其在两者的不同应用。文章提到了C++的虚表存在于对象头部,而JVM的虚表位于klass模型头部,并解释了虚表分发的过程。子牙老师强调了解底层知识对于提升技术水平的重要性,并鼓励读者关注相关底层原理。

大家好,我是江湖人送外号[道格牙]的子牙老师。

本篇文章是接上篇文章【JVM的多态是如何实现的】写的,如果你还没看过,墙裂都建议你看一下。

上篇文章我给出了这道面试题的及格分的回答及七八十分的回答,今天我就告诉大家如果想回答得接近满分,应该怎么回答。因为会设计到C++的虚表及C++的多态实现,如何这块你不理解或不熟,面试中建议别拿出来说,免得碰到懂C++给你来个连环call把你问懵了。关于C++,我后面有计划出一套视频教程。对子牙老师的C++教程感兴趣的小伙伴可以关注本公众号,后面出了会在本公众号推送给你。其实不止是C++,C语言、汇编,都在我的计划之内。

这边给大家补一个知识点。我在昨天的文章里说:当时设计OOP机制的时候,能够想到多态的人,真特么太牛叉了。我给大家讲一下我为什么这样说。或者说,OOP三大机制为什么就是封装、继承、多态。这么几十年了,没加一个、减一个或改一个。

由于多态需要通过动态绑定才能得以实现,而绑定通俗一点讲就是让不同的对象对同一个函数进行调用,或者反过来讲,就是让同一个函数与不同的对象绑定起来,所以多态得以实现的一个大前提就是,编程语言必须是面向对象的。同时,函数与对象相互绑定,意味着函数也属于对象的一部分,这便具备了封装的特性。因为有了封装,才有了对象。同时,一个函数能够绑定多个对象,意味着对各不同的对象具有相同的行为,这是继承的含义。

因此,面向对象的三大特性缺一不可。封装与继承其实是为了多态准备的,或者说,封装与继承成全了多态,多态让封装与继承的意义最大化。

这段话是我在《揭秘Java虚拟机》书中看到的。想要研究JVM,这本书也是必读书籍。但是因为通篇C++,讲hotspot源码,没基础的童鞋慎重入手,免得买回家吃灰。

C++是如何实现多态的

多态的实现,现在几乎所有的编程语言都是基于虚表实现的,英文vtable。这里我没有说全部,因为我也不是所有的语言都了解哈,不敢乱说,免得遭喷。_

C++的虚表在哪呢?在new创建的对象的头部。虚表里面存储的是什么呢?是虚函数。C++这块的知识我就不讲太多了,很多小伙伴不了解C++,讲多了没

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值