-
12-09-2019 - |
質問
Javaではない可能継承から複数のクラスができるの継承から複数のインタフェース), ただ、それはインラインとクラシックダイヤモンドの問題です。私の質問はjavaは、複数の遺産のようにC++の場合があいまいにならない(しないチャンスのダイヤモンドの問題)を受け継ぎながら複数の基底クラス?
解決
これはデザイン決定するましたJavaの。あなたはそれを得ることは決してないだろうので、それについてはあまり心配しないでください。 MIはあなたがミックスインを作るのを助けるかもしれないが、それはMIが今まであなたを行います良いだけです。
他のヒント
私は、ほとんどのプログラマは、適切な方法で多重継承を使用しないことを読みました。 「ちょうど先に行くと、ちょうどコードを再利用するために、クラスから継承する」多重継承の場合のベストプラクティスではありません。
ほとんどの場合、単純な継承を使用する際に、多くのプログラマは知りません。多重継承は慎重に使用する必要があり、あなたが良いデザインを持っているしたい場合は、あなたが何をしているかわかっている場合にのみます。
私はJavaで多重継承の欠如は(C ++のように)クラスにあなたのコード/アプリケーションのデザイン/問題ドメインマッピングの制約を置くことはないと思う。
Javaサポート多重継承、それは、javaの他の機能に影響を与える可能性がある場合
(理由は多重継承の)複数のスーパークラスを持って、その後、コンパイラは、スーパークラスのコンストラクタが呼び出されるべきかについて混乱してしまいますと
シンプルさが人気です。引用 Tom Sintes,
Javaのデザインチームに努めにJava:
- 簡単で、オブジェクト指向になり、馴染みの
- 力強く確保
- 建築中の携帯
- 高性能
- として解釈され、ネジ付きダイナミック
その理由を省略複数の継承から、"Java言語 主幹から、オブジェクト指向になり、おなじみの"の目標です。として 簡単な言語、Javaのクリエイターといった言語 インターネットで提供される年に把握しく知らないます。そのために、 ための言語と同様にC++としての可能(み) 持ち歩かずにC++'s不必要な複雑性(簡単な).
のデザイナーの意見では、複数の継承が課題 混乱で解決.その切り複数の遺産から の言語をどのカットオペレーターの過負荷).のデザイナー 豊富なC++の経験によって複数の継承だけで さんの頭が痛い。
のJavaの設計者はそれを決めました。多重継承は、インターフェイスを使用することによってシミュレートすることができる。
単純な回答はすべてのJavaのクラスからjava.lang.オブジェクトIIRC.いう 常に てダイヤモンドの問題...:-D
Javaの実装の多重継承(ジャストタイプの、すなわちインターフェース)をサポートするために使用しなかったことは事実です。これは、設計上の決定だった。
ただし、Java 8ので、デフォルトのメソッドを使用して複数の継承をサポートしています。 http://docs.oracle.com/javase/tutorial/java/を参照してください。 IandI / multipleinheritance.htmlするます:
実装の多重継承は、継承する機能です 複数のクラスからメソッド定義。問題がこれで発生します そのような名前の衝突や曖昧さなど、複数の継承、のタイプ。 ...デフォルトの方法は、複数の継承の一の形態を導入します 実装ます。
ダイヤモンドの問題が発生します。 JavaですべてのクラスはObjectから派生するのであれば、それは、単一の親クラスは何。 「単一の親、複数の派生クラスは、」
「複数の両親、単一派生クラス」と同じではありません