Java と C# で多重継承が許可されない理由
多重継承、つまりクラスが継承する機能はよく知られています。複数の親クラスからの使用は、Java または C# では許可されません。多くのリソースは単にこの事実を述べていますが、多くの場合、この設計上の決定の背後にある根本的な理由を詳しく掘り下げることができません。
短い答え:
理由は単に言語がデザイナーはそれを含めないことにしました。
長め説明:
.NET と Java の両方の設計者は、多重継承によって言語に大幅な複雑性が追加される一方で、最小限の利点しか得られないと考えました。複雑さには以下が含まれます:
-
競合の解決: 多重継承により、異なる親クラスから同じ名前のメソッドまたはプロパティを継承するときに競合を解決する方法という問題が発生します。
-
冗長性の処理: 一部のシナリオでは、多重継承により継承メンバーの重複が発生する可能性があります。これにより、あいまいさと混乱が生じる可能性があります。
-
実装のオーバーヘッド: 複数の継承を追加すると、キャスト、レイアウト、ディスパッチ、フィールド アクセス、シリアル化、ジェネリックなどの領域が複雑になります。
言語によるインタビュー設計者:
.NET の CLR に取り組んだ Chris Brumme 氏は、この決定についてさらに説明しました:
- 言語が異なると MI に対する期待が異なるため、実装が困難になります普遍的なソリューションです。
- MI の実際のアプリケーションは多くの場合制限されており、複数のインターフェイスの継承やカプセル化などの代替手段は多くの場合、これで十分です。
- MI を実装するには、言語の実装に大幅な変更が必要となり、機能のさまざまな領域に影響します。
Java の場合も、理論的根拠は同様です。
- シンプルさ、親しみやすさ、そして不必要な C の複雑さを避けたいという欲求が、Java の指針となっていました。 design.
- 設計者は、C の経験に基づいて、多重継承は解決するよりも多くの問題を引き起こすと信じていました。
以上がJava と C# が多重継承を避けることを選択したのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。