我有一个关于方法绑定(bind)的问题。如您所知,私有(private)、静态和 final方法的绑定(bind)发生在编译时,而重写方法的绑定(bind)发生在运行时。
下面,我们在Parent
中有一个方法something()
,该方法在相应的子类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()
的调用(尽管没有被覆盖)仍然是动态绑定(bind)的吗?
最佳答案
首先,方法签名是在编译时确定的。但是,方法绑定(bind)始终在运行时完成。运行时分派(dispatch)的确切规则在 JLS §15.12.2.5 中定义。 .
正如您现在可能猜测的那样,p.something();
的调用仍然是动态有界的。
作为旁注,请查看 this清楚地理解多态性。
关于java - 未重写的公共(public)实例方法是否动态绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117827/