class A { void F() { System.out.println("a"); }}
class B extends A { void F() { System.out.println("b"); }}
public class X {
public static void main(String[] args) {
A objA = new B();
objA.F();
}
}
这里,F()
是动态调用吗?
这篇文章说:
......Java字节码不支持动态方法调用。有三种支持的调用模式:invokestatic、invokespecial、invokeinterface或invokevirtual。这些模式允许调用具有已知签名的方法。我们谈论的是强类型语言。这使得在编译时可以直接进行一些检查。
另一方面,动态语言使用动态类型。因此,我们可以调用在编译时未知的方法,但这在Java字节码中完全不可能。
我错过了什么?