動的ディスパッチは、変数の宣言された型ではなく、オブジェクトの実際の型に基づいてどのメソッド実装を実行するかを決定するランタイムメカニズムです。ほとんどのクラスベースの言語は、仮想メソッドテーブル (vtable) を使用して実装しています。
vtableモデル
各クラスは、そのメソッド実装へのポインタテーブルを持ちます。各オブジェクトは、その クラスの vtable への隠しポインタを保持します。仮想呼び出しは次のようになります: オブジェクトの vtable でメソッドを検索し、そこにジャンプします。
text
Animal a = new Dog();
a.speak();
a ──▶ Dog object ──▶ [Dog vtable]
speak() ──▶ Dog.speak() ← chosen at RUNTIME
コンパイラは をハードコードしません。代わりに「このオブジェクトが指すどの vtable のスロット N でも呼び出す」を発行します。
