Java多态原理
2022/5/24 1:22:44
本文主要是介绍Java多态原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
多态的概念
多态分为:编译时多态,运行时多态
编译时多态:也叫做静态多态
指的是方法的重载,在同一个类中,同样的方法签名却有不同的参数。编译时通过静态绑定就能实现。
运行时多态:也叫做动态多态
指的是方法的重写,在具有继承关系的类中,子类重写了父类方法,方法签名和参数都一致,父类引用指向子类实例,该引用调用被重写方法时实际上调用的是子类的方法。需要运行时进行动态绑定实现
jvm内部类信息:
jvm使用类加载器将把类加载进方法区
同时在方法区维护了类的基本信息,其中就包括了方法信息,而为了能够快速访问具体方法
每个类都有一个方法表,里面存放了指向对应方法的指针
当需要调用某个类的方法时,只需要找到相应偏移量,就能够快速地找到对应的方法,如下图所示:
方法表的构成:
某个类的方法表包含了Object类、祖先类、父类、自身的方法指针
多态的实现原理
public class A{ //对比方法 public void method1(){ ...; } //被子类重写的方法 public void method2(){ ...; } } public class B extend A{ //对比方法 public void method3(){ ...; } //重写了父类的方法 @Override public void method1(){ ...; } }
从方法表中,我们可以看出重写就是把子类方法的指针替换了方法表里父类对应方法项的值
变量类型A,找到A的类信息,确定A的method方法的偏移量。
然后,通过对象引用,找到堆中B对象,通过B对象,找到B类信息,根据偏移量,调用B类方法表对应的方法!
最终实现了多态
这篇关于Java多态原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?