Javaではクラスの多重継承が禁止されています。
これは、多重継承によって、親クラスのメソッド同士が競合するのを避けるため。と習いました。
が、それならば多重継承によって競合したメソッドのオーバーライドを強制すれば済む話だと思うのですが、それではいけないのでしょうか?
多重継承が禁止されている理由について、上記以外の物があれば、教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
よそのQ&Aサイトへ行った回答ですが、同じ趣旨の質問への回答のため転記しておきます:
言語設計時の選択として、単純さ(Simple)を選んだ結果でしょう。Javaの生みの親 James Gosling氏による、1995年発行のWhitePaper "Java: an Overview" より引用します。
Simple
JAVA omits many rarely used, poorly understood, confusing features of C++ that in our experience bring more grief than benefit. This primarily consists of operator overloading (although it does have method overloading), multiple inheritance, and extensive automatic coercions.
多重継承(multiple inheritance)が意味する範囲は広く、「状態(state)の多重継承」、「実装(implementation)の多重継承」、「型(type)の多重継承」に分類できます。公式The Java Tutorials, Multiple Inheritance of State, Implementation, and Type でも言及されている通り:
- 状態(state)の多重継承:言語仕様上の選択としてサポートしない
- 実装(implementation)の多重継承:Java8で導入されたデフォルトメソッド(default method)でサポート
- 型(type)の多重継承:インターフェイス(interface)継承でサポート
同WhitePaperで言及されるC++言語の場合、既定動作では「状態(state)の多重継承」により親クラスの状態が複数存在する振る舞いになります。これを回避する機構として仮想継承(virtual inheritance)という言語機能をオプション提供しますが、比較的複雑で難解な機能です。C++ではプログラマに選択の自由度を与えますが、複雑で理解を難しくしているのも事実です。
c++
1// C++言語における「状態(state)の多重継承」 2 3class B { int m1; }; 4// クラスD1,D2ともにクラスBを継承 5class D1 : public B { ... }; 6class D2 : public B { ... }; 7 8// D1,D2を多重継承したクラスXのインスタンスには 9// 親クラスBのインスタンスが 2 つ含まれる。 10// つまりm1変数という「状態」が2つ同時に存在する。 11class X : public D1, D2 {};
Java言語では、プログラマにこのような難しい選択をさせないという思想になっています。
投稿2016/08/30 06:13
総合スコア6191
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。