我对方法绑定有疑问。如您所知,私有,静态和最终方法的绑定发生在编译时,而重写方法的绑定在运行时发生。
在下文中,我们在something()
中有一个方法Parent
,该方法未在相应的子类Child
中重写。
class Parent {
void something() {
}
}
class Child extends Parent {
}
public class Main {
public static void main(String[] args) {
Parent p = new Child();
p.something(); // still dynamically bound?
}
}
我们的主程序中p.something()
的调用(虽然没有被覆盖)仍然是动态绑定的吗?
答案 0 :(得分:1)
首先,在编译时确定方法签名。但是,方法绑定始终在运行时完成。运行时调度的确切规则在JLS §15.12.2.5。
中定义因此,正如您现在可能正在猜测的那样,p.something();
的召唤仍然受到限制。
作为旁注,请查看this以清楚地了解多态性。