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是否支持动态方法调用?
...的Java字节码不支持 动态方法调用。有 三个受支持的调用模式: invokestatic,invokespecial, invokeinterface或invokevirtual。 这些模式允许调用具有已知签名的方法 。我们谈论 强类型语言。这允许 直接在 编译时进行一些检查。
另一方面,动态的 语言使用动态类型。因此,我们可以在编译 时调用未知的方法 ,但用Java字节码完全不可能得到 。
我在想什么?
运行该程序时会发生什么? – 2010-04-09 16:46:47
@Dave:打印'b' – Lazer 2010-04-09 16:52:18
该文章的作者需要计算一课。 – Syntactic 2010-04-09 16:56:16