Java多态和实现原理

多态是什么

父类引用指向子类对象,调用方法的时候会去调用子类的实现而不是父类的实现。
引用所指向的对象在编译时不确定,而是在运行期间确定。
分为编译时多态(方法重载)和运行时多态。
运行时多态三条件:1、继承;2、重写;3、向上转型(父类引用指向子类引用)

JAVA的多态底层实现

底层实现是动态绑定,即在运行时才把方法调用与方法实现关联起来。调用类方法时,基于对象引用的类型来选择所调用的方法;调用实例方法时,基于对象实际的类型来选择所调用的方法。而动态绑定又与方法表有着密切联系。
在这里插入图片描述
1、当JVM执行方法时,会先通过对象引用找到对象实际的内存位置,但此时还并不知道实际对象类型。
2、对象内存中保存着所属类和超类声明的实例变量,根据特殊结构指针找到对应类型的方法表。
3、方法表中的方法数据按照在class文件中出现的顺序,当子类方法覆盖父类方法时,该方法出现在父类该方法第一次出现的位置。
4、通过类型数据指针可以找到相应的类型和Class实例。
5、通过方法数据指针就可以找到实际的方法。

在这里插入图片描述
1、父类方法的顺序按照Class文件中出现的顺序排列。
2、子类型方法表中方法与父类型方法的顺序保持一致,但覆盖的方法指向子类型数据,同时覆盖掉原来在父类型的位置。
参考https://blog.csdn.net/sureyonder/article/details/5569617

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值