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