0

C++ には仮想テンプレート関数のようなものがないことを私は知っています。これは、コンパイル時に VTBL へのエントリを知る必要があり、各テンプレート タイプが個別にコンパイルされるためです。

ただし、Javaでは、ジェネリック型は1回だけコンパイルされ、ジェネリッククラスのメソッドをオーバーライドできることを理解しています。これは本当ですか?

もしそうなら、このデザインの選択は作るのですか?

4

2 に答える 2

4

Java にはテンプレート クラスがありません。代わりに、ジェネリックがあります。これは、コンパイル時に追加の型情報を持つ通常の Java クラスであり、コンパイラが型安全性チェックを実行できるようにします。これらのチェックが完了すると、ジェネリック型に関する情報が「消去」され、コンパイルされたクラスは他のクラスと同じように見えます。

于 2013-10-14T22:52:31.393 に答える
1

非最終、非プライベート、非静的メソッドは、ジェネリックかどうかに関係なく、サブクラスでオーバーライドできます。タイプは実際にはすべての場合で参照であるため、これは機能します。タイプを変更すると、参照のタイプが変更されるだけです。

ところで、Java ではすべての非静的メソッドは「仮想」です。

于 2013-10-14T22:53:15.310 に答える