JLS在§8.4.9重载中规定:
- 调用方法时(第15.12节),实际参数(和任何显式类型参数)的数量以及参数的 编译时类型 在编译时用于确定将要调用的方法的签名( §15.12.2)。
- 如果要调用的方法是实例方法,则将在运行时使用动态方法查找(第15.12.4节)确定要调用的实际方法。
因此,在您的情况下:
- 方法参数(
this
)为编译时类型Parent
,因此将print(Parent)
调用该方法。 - 如果
Worker
该类是子类的,并且该子类将重写该方法,而该worker
实例是该子类的实例,则将调用重写的方法。
Java中不存在双调度。您必须模拟它,例如,使用“
访客模式”。在这种模式下,基本上,每个子类都实现一个
accept方法并以
this作为参数调用visitor
,并
this具有该子类的编译时类型,因此使用了所需的方法重载。



