多重継承 – 定義

一部のオブジェクト指向プログラミング言語 (C++、Eiffel、Python など) では、クラスが複数の スーパークラスから動作や機能を継承できる多重継承が許可されています。クラスが単一の スーパークラスから継承する単純な継承とは異なります。

多重継承は難しい問題を引き起こす可能性があるため、その利点が欠点を上回るかどうかについては議論があります。 Java は次のような妥協をしました。クラスが複数の親からインターフェイスを継承できるようにします (つまり、クラスがすべてのメソッドをそのインターフェイスの親の外部に公開する必要があると指定でき、コンパイラーがこれを保証できるようにします)。ですが、単一の親クラスのメソッドとデータを継承できます。 C# やVisual BasicなどのMicrosoft言語もこれと同じアプローチを実装しています。

多重継承に関する主な問題は、クラスの先祖に複数回存在するメソッドやメンバーなどのエンティティに起因します。たとえば、バッテリで駆動されるポータブル デバイス用のAppクラス、 Appから継承する携帯電話用のTelOrdクラス、 Appから継承するラップトップ用のOrdクラス、そして最後に、 から継承するコンピュータの機能も持つ電話用のTelOrdクラスを定義するとします。電話番号電話番号。そのため、 TelOrdインスタンスにバッテリーが 1 つあるのか 2 つあるのか、またそれらをどのような名前で区別するのかは実際にはわかりません。解決策の 1 つは、エンティティを分離するために、繰り返しエンティティをマージするか名前を変更するかを選択するメカニズムを言語に追加することです。このソリューションは、よく知られているものだけを挙げると、Eiffel または Ocaml で実装されています。 C++ では、それほど野心的ではない補完ツールとして仮想継承を提供しています。多重継承に含まれるセマンティック メカニズムの精緻さは多くのユーザーを敬遠させており、開発者コミュニティの一部で評判が悪い原因となっています。

第 2 レベルの問題は、多重継承のあるクラスを使用してプログラムをコンパイルまたは実行するときに発生します。実際、多態性メソッドを呼び出す場合 (同じメソッドが相互に継承するクラス内に複数のバージョンがある場合)、どのメソッドを実行する必要があるかを見つける必要があります。単純な継承のコンテキストでは、クラスの祖先がリストを形成し、簡単なテストで適切なバージョンを見つけることができるダイナミックリンク テーブルを簡単に作成できます。多重継承のコンテキストでは、クラスの祖先がグラフを形成するようになり、ダイナミック リンク テーブルの作成がより困難になります。ただし、このためのコンパイル アルゴリズムが存在します。したがって、単一継承と同じ実行時コストで複数の継承を解決できます。明らかに、コンパイルされていない言語 (PHP など) でこれらのテクニックを使用することは不可能です。この場合、実行中に継承グラフをたどる必要があり、これは非常に長くなる可能性があります。

  1. وراثة متعددة – arabe
  2. Множнае спадкаваньне – Belarusian (Taraškievica orthography)
  3. Vícenásobná dědičnost – tchèque
  4. Mehrfachvererbung – allemand
  5. Multiple inheritance – anglais
  6. Herencia múltiple – espagnol

多重継承 – 定義・関連動画

サイエンス・ハブ

知識の扉を開け、世界を変える。