Java多态和实现原理

多态是什么

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

JAVA的多态底层实现

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

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

你可能感兴趣的:(总结,java,开发语言)