仮想メソッドの呼び出しでは、実際に呼び出されるメソッドの実装は、呼び出しが行われるインスタンスの<b>実行時の型</b>によって決まります。非仮想メソッドの呼び出しでは、インスタンスの<b>コンパイル時の型</b>によって決まります。

これが仕様です。