多重継承とは? わかりやすく解説

Weblio 辞書 > コンピュータ > IT用語辞典 > 多重継承の意味・解説 

多重継承

読み方たじゅうけいしょう
【英】multiple inheritance

多重継承とは、複数親クラス継承するというオブジェクト指向プログラミングテクニックのことである。

多重継承は、あるクラス複数親クラス継承することで、複数親クラス特徴引き継ぐことである。C++などで可能な方法であり比較的よく利用されている。

多重継承では、機能組み合わせるという意味では有効であるが、メソッド名の衝突問題継承関係が複雑になり、クラス分割再利用が困難になることで継承本質から逸脱するという大きな問題孕んでいる。

C++では、この問題に対して仮想継承仕組み適用して回避している。また、多重継承が許されていないJavaでは、インターフェース継承外延継承)を使うことで多重継承に似たテクニック適用できる

プログラミングのほかの用語一覧
オブジェクト指向:  疎結合  スーパークラス  COM  多重継承  単一継承  デストラクタ  UML

継承 (プログラミング)

(多重継承 から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/10/17 00:49 UTC 版)

コンピュータプログラミングにおける継承(けいしょう、: inheritance)とは、任意のオブジェクトの特性を、他のオブジェクトの特性の基礎にするためのメカニズムと定義されている。


  1. ^ MDN contributors (2022年9月17日). "継承とプロトタイプチェーン - JavaScript". developer.mozilla.org. 2022年9月18日閲覧


「継承 (プログラミング)」の続きの解説一覧

多重継承

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/05 08:46 UTC 版)

継承 (プログラミング)」の記事における「多重継承」の解説

クラス複数スーパークラス持たせることを多重継承という。単一継承異なり、多重継承では、スーパークラス上のメンバサーチが複数方向分かれるので、どのメンバ参照されるのかの把握困難になるという欠点がある。特にフィールドの多重継承・分散配置は、早期原則禁止一般化している。メソッドの方はやむなく許容されたので、メソッド決定順序MRO問題取り沙汰された。MRO問題解決するために導入されたのが、インターフェース実装トレイトインクルードであり、双方データ主体クラス単一継承にしてメソッド主体クラスを多重継承にするというハイブリッド継承担い手になったまた、多重継承上のスーパークラス重複による菱形継承問題問題視されるようになっている菱形継承問題解決策としては、C++/Eiffel発の仮想継承Eiffel発のリネーミング、Python発のC3線形化などがある。 多重継承と仮想継承コーディング例を以下に示す。同一クラスから継承している複数派生クラスを多重継承して1つのクラス作る場合始め基底クラス存在どうするかによって仮想継承通常の多重継承の2つ分かれるclass Base {public: int n;};// 非仮想継承class DerivedNV1 : public Base { /* ... */ };class DerivedNV2 : public Base { /* ... */ };// 仮想継承class DerivedV1 : public virtual Base { /* ... */ };class DerivedV2 : public virtual Base { /* ... */ };class DerivedNV : public DerivedNV1, public DerivedNV2 { /* ... */ };class DerivedV : public DerivedV1, public DerivedV2 { /* ... */ };int main() { DerivedNV nv; //nv.n = 0; // 曖昧さ解決できないためコンパイルエラー。 nv.DerivedNV1::n = 0; nv.DerivedNV2::n = 0; DerivedV v; v.n = 0; // コンパイルエラーにはならないreturn 0;} この例のような状態は特に菱形継承ダイアモンド継承)と呼ばれる仮想継承ない場合、DerivedNVのインスタンスにはDerivedNV1の基底Base::nとDerivedNV2の基底Base::nという2つのnが別に存在することになる(メンバ関数も同様)一方仮想継承した場合、DerivedVのインスタンスにはBase部分はただ1つしか存在しない。DerivedV1の基底とDerivedV2の基底共有されている状態である。 先発OOP言語C++Eiffelでは実装の多重継承ができたが、後発言語JavaC#では実装単一継承限定にされ、代わりにインターフェースの多重継承(界面の多重継承)が導入されている。なぜなら実装の多重継承はメリットよりもデメリットのほうが多いとみなされたためである。 継承関係が複雑になるため全体把握困難になる。 名前の衝突。同じ名前を複数基底クラスそれぞれ別の意味用いていた場合、その両方派生クラスオーバーライドするのが困難。 処理系実装複雑になってしまう。 仮想継承にしていない場合同一基底クラス複数存在してしまう(これが望ましい場面もあるが)。これの何が問題というと最初仮想継承していなかったものを、後から仮想継承にしたくなったときに、変更点洗い出すのが大変になるからである。つまり仮想継承使用するには設計をきちんと行う必要があるということである。 しかしながら多重継承を使う方が直感的になる場合もあるとの主張もあり、どちらが正しとは言えない状況である。

※この「多重継承」の解説は、「継承 (プログラミング)」の解説の一部です。
「多重継承」を含む「継承 (プログラミング)」の記事については、「継承 (プログラミング)」の概要を参照ください。

ウィキペディア小見出し辞書の「多重継承」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「多重継承」の関連用語

多重継承のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



多重継承のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2024 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリ多重継承の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの継承 (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの継承 (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS