【发布时间】:2018-08-26 10:27:48
【问题描述】:
我正在学习 cs61b 伯克利公开课程,对这个问题感到困惑(问题 1,第 7 行): https://sp18.datastructur.es/materials/discussion/examprep04sol.pdf
c.play(d); // Method D is called
所以在这种情况下d 具有Dog 的静态类型和Corgi 的动态类型,在编译时记录Method D,那么为什么在运行时它仍然调用Method D 而不是@ 987654328@基于其动态类型?
【问题讨论】:
-
Java 中的“链接”是在编译时根据声明的(静态)类型完成的。
-
虚拟方法调用仅适用于左操作数,因为方法的签名在编译时确定,在运行时不会更改。这是为了简化方法查找,尤其是您可以拥有任意数量的组合,这些组合可以匹配其他方式。
标签: java polymorphism dynamictype