1. 静的メソッドは、通常のプロシージャや関数と同じように呼び出されるメソッドです。コンパイラはこれらのメソッドのアドレスを知っているため、静的メソッドが呼び出されるとき、実行可能ファイルに実行情報を静的にリンクできます。したがって、静的メソッドが最も高速ですが、ポリモーフィズムをサポートするためにオーバーライドすることはできません。
2. 仮想メソッドと静的メソッドは同じ方法で呼び出されます。仮想メソッドはオーバーライドできるため、コンパイラは、コード内で呼び出されるときに指定された仮想メソッドのアドレスを知りません。そのため、コンパイラは、仮想メソッド テーブル (VMT) を構築することによって、関数のアドレスを検索します。すべての仮想メソッドは実行時に VMT を通じて処理されます。オブジェクトの VMT テーブルには、それ自体で定義された仮想メソッドも含まれます。そのため、仮想メソッドは動的メソッドよりも多くのメモリを使用しますが、実行は比較的高速です。
3. 動的メソッドは、高さシステムが異なることを除いて、基本的に仮想メソッドと似ています。コンパイラは各動的メソッドに一意の番号を割り当て、この番号と動的メソッドのアドレスを使用して動的メソッド テーブル (DMT) を構築します。 VMT テーブルとは異なり、DMT テーブルには動的メソッドのみが宣言されており、このメソッドでは他の動的メソッドにアクセスするために祖先 DMT テーブルが必要です。このため、動的メソッドは仮想メソッドよりも使用するメモリが少なくなりますが、オブジェクトの DMT で動的メソッドを検索する必要がある場合があるため、実行が遅くなります。
4. OP はオーバーライドを使用して、メソッドが異なる派生クラスで異なる動作を示すようにします。 OP でオーバーライドできるメソッドは、宣言時に仮想または動的としてマークされているメソッドです。メソッドをオーバーライドするには、派生クラス宣言で virtual または Dynamic の代わりに override を使用します。オーバーライドを使用した後、コンパイラは VMT 内の元のメソッドを新しいメソッドに置き換えます。オーバーライドを使用して静的メソッドを再度宣言すると、それは実際のオーバーライドとなり、新しいメソッドによって完全にカバーされます。祖先クラスの同じメソッドを置き換えます。