欢迎光临散文网 会员登陆 & 注册

Java多态的实现机制原理

2022-03-02 10:54 作者:房顶上的铝皮水塔  | 我要投稿

参考内容:

Java的多态(深入版):https://segmentfault.com/a/1190000021936858

Q:Java的多态的实现机制原理

A:知识准备:

1. JVM中的方法调用指令:

2.Java中的方法调用分成两种类型:

静态调用&动态调用

我们来看看下面的代码。在如下的代码中Human类型的引用man实际上是一个Man类型,woman也是类似的意思。然后在StaticDispatch中有三个重载方法,其中放入的参数类型是不同的。

最后输出的结果:

这是因为重载是静态分派的,Human这个类型被称为静态类型,实际类型是Man Woman。实际类型是在运行时确定的。

我们再来看看重写的例子:

这个很显然,输出的结果是我们重写之后的方法的输出。

我们通过字节码来看看原因:

1. 对于重载的例子:

可以看到在字节码中调用了invokevirtual调用了虚方法,因为重载在编译器是通过静态类型确定方法参数的,所以我们能够在Class翻译成的Java代码中还看到,字节码将man对象转换成了Human对象。

2. 重写的例子:

重写的例子和重载的例子类似,而且都使用了invokevirtual指令。invokevirual指令在运行期会去寻找接受者的实际类型。所以对应的Java class字节码没有像重载一样转型成human:


Java多态的实现机制原理的评论 (共 条)

分享到微博请遵守国家法律