すべてのJavaメソッドはデフォルトで仮想ですが、Javaが多重継承をサポートしていないのはなぜですか? Javaでダイヤモンドの問題が発生するのはなぜですか?
4 に答える
James Gosling (Java の「父」として知られる) は次のように述べています。
JAVA は、C++ のほとんど使用されず、よく理解されていない、紛らわしい機能の多くを省略しています。これは主に、演算子のオーバーロード (メソッドのオーバーロードはありますが)、多重継承、および広範な自動強制で構成されます。
参照: http://javapapers.com/core-java/why-multiple-inheritance-is-not-support-in-java/
したがって、彼によると、彼らはそれが悪い考えだと思ったので、単に追加したくありませんでした.
PS 複数のインターフェースを使用することは、多重継承と同じではありません。
多重継承の可能性がないという理由だけで、ダイヤモンドの問題が Java で発生することはありません。
インターフェイスは具体的なクラスよりも柔軟性があり、単一のクラスを使用して複数のインターフェイスを実装するオプションがあるためです。これは、クラスを作成するために 2 つの設計図に準拠しているという合意によるものです。java のきれいな定義を見てみましょう:
JAVA: A simple, object oriented, distributed, interpreted, robust, secure,
architecture neutral, portable, high performance, multithreaded,
dynamic language.
Java は多重継承をサポートしていないため、 Diamond 問題が発生する可能性はありません。
多重継承プログラミングに起因する開発エラーを制限し、複雑さを取り除くことは、太陽の恣意的な決定だと思います