C++ には仮想テンプレート関数のようなものがないことを私は知っています。これは、コンパイル時に VTBL へのエントリを知る必要があり、各テンプレート タイプが個別にコンパイルされるためです。
ただし、Javaでは、ジェネリック型は1回だけコンパイルされ、ジェネリッククラスのメソッドをオーバーライドできることを理解しています。これは本当ですか?
もしそうなら、このデザインの選択は作るのですか?
C++ には仮想テンプレート関数のようなものがないことを私は知っています。これは、コンパイル時に VTBL へのエントリを知る必要があり、各テンプレート タイプが個別にコンパイルされるためです。
ただし、Javaでは、ジェネリック型は1回だけコンパイルされ、ジェネリッククラスのメソッドをオーバーライドできることを理解しています。これは本当ですか?
もしそうなら、このデザインの選択は作るのですか?
Java にはテンプレート クラスがありません。代わりに、ジェネリックがあります。これは、コンパイル時に追加の型情報を持つ通常の Java クラスであり、コンパイラが型安全性チェックを実行できるようにします。これらのチェックが完了すると、ジェネリック型に関する情報が「消去」され、コンパイルされたクラスは他のクラスと同じように見えます。
非最終、非プライベート、非静的メソッドは、ジェネリックかどうかに関係なく、サブクラスでオーバーライドできます。タイプは実際にはすべての場合で参照であるため、これは機能します。タイプを変更すると、参照のタイプが変更されるだけです。
ところで、Java ではすべての非静的メソッドは「仮想」です。