向上转型底层原理分析

本文探讨了Java中向上转型的底层原理,包括方法表的概念和向上转型的方法调用机制。向上转型是多态和继承的核心,通过JVM层面的分析,详细解释了类的加载、方法存储和方法表的生成,以及在向上转型过程中如何查找和调用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

向上转型

向上转型在写代码的过程中经常会用到,它不仅是实现多态的重要机制,也是Java继承体系的精华体现。
向上转型常见的形式是:Person person = new Student();这里的Student类是Person类的子类,我们通过Student类的实例构建了一个父类的对象。在方法的调用层面上,person对象只能调用在Person类中存在的方法,且其中的方法一旦被子类重写,那么就会优先调用子类中被重写的方法。或许在运用层面明白这些就足够了,但是在算法的设计以及JVM调优中,只是会运用是远远不够,还需要理解其底层的原理。接下来让我们在JVM层面去理解向上转型的方法调用过程。

方法表的概念

继承过程图示
在这里插入图片描述
简述:假设存在这样一个继承关系,Object类被子类1继承,子类1又被子类2继承。图示展示了在继承过程中方法和方法表的变化。每当用到一个类,如果它还没有被加载,那么就会把类的信息翻译为字节码记载到JVM相应的区域(每个类只加载一次)。
1、Object类加载:如图,我们先new一个Object对象,JVM会先在堆中申请一块存储空间存放Object类的方法,然后在方法区生成一张方法表,方法表中有指针,指向这些方法,在需要调用这些方法的时候,就可以通过方法表来索引方法。
2、然后让子类1继承Object类,同样,会为子类1在堆中开辟一块存储空间来存放子类1的方法(是指代码中写在子类1中的那些方法),然后生成子类1的方法表,方法表首先会继承一份自父类(类似于复制),父类有的方法子类都会获得,且子类和父类的同名方法在方法表上的位置偏移量完全相同,这时,我们再根据子类下写的那些方法来调整方法表,如果子类重写了一个父类的同名方法,那么指针会修改为指向子类的方法存储区域

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值