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 の 3 つです。これらのモードでは、既知の署名でメソッドを呼び出すことができます。強く型付けされた言語について話します。これにより、コンパイル時に直接いくつかのチェックを行うことができます。
一方、動的言語は動的型を使用します。したがって、コンパイル時に未知のメソッドを呼び出すことはできますが、Java バイトコードではそれはまったく不可能です。
私は何が欠けていますか?