実際、この質問はインタビュアーの 1 人からの質問でした。
Que: Java が多重継承をサポートしていないとどうして言えますか? Object クラスが Java のすべてのクラスの親である場合。
私はその質問の答えを持っていません。
これは、Java の概念について明確な考えがないことを意味します :-(
例: A が B を拡張する場合
ここで、A は既に Object クラスを拡張しています。右?今、どのように機能しますか?
あなたの答えを共有してください..
実際、この質問はインタビュアーの 1 人からの質問でした。
Que: Java が多重継承をサポートしていないとどうして言えますか? Object クラスが Java のすべてのクラスの親である場合。
私はその質問の答えを持っていません。
これは、Java の概念について明確な考えがないことを意味します :-(
例: A が B を拡張する場合
ここで、A は既に Object クラスを拡張しています。右?今、どのように機能しますか?
あなたの答えを共有してください..
何よりも、言語設計をシンプルに保つために
そして、 私が定期的にフォローしているブログの例。
1) Aから継承する2 つのクラスBとCがあります。
2) BとCが継承されたメソッドをオーバーライドしており、独自の実装を提供しているとします。
3) Dは、多重継承を行うBとCの両方から継承します。Dはそのオーバーライドされたメソッドを継承する必要がありますが、どのオーバーライドされたメソッドが使用されますか? BかCか?
ここにあいまいさがあります。
これを克服する方法として、インターフェースとマルチレベル継承があります。
編集 :
And here A is already extending Object class.
それはMultiple inheritance
as と呼ばれることはありません。Multi level inheritance.
マルチレベルでは、
には多くのクラスが含まれますがinheritance
、1 つのクラスは のみを拡張しone
ます。最も低いsubclass
ものは、すべてsuper classes
のコンテンツを利用できます。
この StackOverflow の回答をご覧ください: https://stackoverflow.com/a/9790475/2619912
他のクラスを拡張するクラスですが、オブジェクトも拡張するため、2 行ではなく 1 行の継承になります。
Java での多重継承の唯一の類似点はInterfaces
. クラスは複数のインターフェースを実装できます。
Object
クラスは多重継承の例ではありません。質問を誤解している可能性があります。
これは、Java に関する一般的な誤解です。
多重継承が (C++ および Python で) 機能する方法は、次のようなものです。
Parent1 Parent2 Parent3
| | |
_______________________
|
v
Child
これはChild
、すべての親から属性とメソッドを継承することを意味します。
ただし、Java では、継承はこのように機能します。
Object
|
v
Child1
|
v
Grandchild
したがって、object はすべてのクラスのスーパークラスですが、すべてのクラスの直接の親ではありません。ただし、Java は、次の方法で多重継承をいくらか実装する方法を提供します。Interfaces
Object
|
v
Child <--- Interface
|
v
Grandchild
次に、Grandchild
メソッドを継承Child
し、インターフェイスで定義されたメソッドを実装する必要があります[抽象クラスでない限り、それは完全に別の議論です]
したがって、Object はすべてのクラスの祖先ですが、すべてのクラスの親ではないため、Java は多重継承をサポートしていません。
答えは、Java は複数レベルの継承をサポートしていますが、多重継承はサポートしていないということです。
Java クラスは、単一の親クラスの直接の子にしかなれません。祖父母を持つことはできますが、2 番目の親を持つことはできません。それは、実の母親が一人いるようなものです。実の母親を複数持つことはできませんが、祖母を持つことはできます。
クラス A とクラス B があるとします。次に、クラス Derived を定義します。多重継承とは、クラス Derived がクラス A とクラス B の両方を継承できることを意味します。しかし、これは Java では不可能です。したがって、多重継承はサポートされていません。
Que: Java が多重継承をサポートしていないとどうして言えますか? Object クラスが Java のすべてのクラスの親である場合。
Object はすべてのクラス (父、祖父、曽祖父など) の祖先ですが、すべてのクラスには 1 つの父しかありません (指定されていない場合、それは Object クラスです)。
最初のケース: 継承を使用せずにクラス A を作成するとします。デフォルトでは、Object クラスから派生します。
2 番目のケース: クラス A を拡張するクラス B を作成するとします。クラス A には Object クラスのすべてのフィールドが含まれるため、クラス B にも継承によってそれらが含まれます。である
class B extends A(which extends Object)
ため、B は A のサブクラスであり、Object のサブクラスでもあると言えます。