私が読んでいる本には、サブクラスのメソッドをオーバーライドすると、実行時のポリモーフィズムを意味すると書かれています。コンパイル時のポリモーフィズムのようなものはありますか? 単純な継承はコンパイル時に発生し、ポリモーフィズムは実行時だと思いました。
2 に答える
これらは、コンパイル時のポリモーフィズムと呼ばれることもあるメソッドのオーバーロードを暗示しています。
実際、メソッドのオーバーロードを使用すると、パラメーターとして渡されたオブジェクトの型に基づいて、さまざまなコードを呼び出すことができます。オーバーロードはコンパイル時に解決されるため、オーバーロードのメカニズムはコンパイル時のポリモーフィズムと考えることができます。
Lucca Cardelli は、On Understanding Types, Data Abstraction and Polymorphismという名前の優れた記事を持っており、あなたの質問に対する答えを非常に詳細に説明しています。
質問で言及したことは、アドホック ポリモーフィズムと呼ばれ、メソッドのオーバーロードと型の一貫性 (演算子のオーバーロードのようなもの) で構成され、これら 2 つはコンパイル時に発生します。一方、特定のメソッドの適切な実装の選択は実行時に行われます。これは、パラメトリックまたは包含ポリモーフィズムと呼ばれるものの一部です。
しかし、ルッカ・カルデッリは、私がこれまでに夢見てきたものよりも優れた答えを提供してくれると確信しています。
最近、このフォーラムで別の同様の質問に参加し、これら 2 種類のポリモーフィズムの例をいくつか提供しました。見てみたいと思うかもしれませんが、これはあなたがすでに知っているかもしれないという印象を持っています.
オブジェクト指向プログラミング言語のポリモーフィズムもお読みください。