10

実際、この質問はインタビュアーの 1 人からの質問でした。

Que: Java が多重継承をサポートしていないとどうして言えますか? Object クラスが Java のすべてのクラスの親である場合。

私はその質問の答えを持っていません。

これは、Java の概念について明確な考えがないことを意味します :-(

例: A が B を拡張する場合

ここで、A は既に Object クラスを拡張しています。右?今、どのように機能しますか?

あなたの答えを共有してください..

4

14 に答える 14

8

何よりも、言語設計をシンプルに保つために

そして、 私が定期的にフォローしているブログの例。

ここに画像の説明を入力

1) Aから継承する2 つのクラスBCがあります。

2) BCが継承されたメソッドをオーバーライドしており、独自の実装を提供しているとします。

3) Dは、多重継承を行うBCの両方から継承します。Dはそのオーバーライドされたメソッドを継承する必要がありますが、どのオーバーライドされたメソッドが使用されますか? BCか?

ここにあいまいさがあります。

これを克服する方法として、インターフェースマルチレベル継承があります。

編集 :

And here A is already extending Object class.

それはMultiple inheritanceas と呼ばれることはありません。Multi level inheritance.

マルチレベルでは、

には多くのクラスが含まれますがinheritance、1 つのクラスは のみを拡張しoneます。最も低いsubclassものは、すべてsuper classesのコンテンツを利用できます。

于 2013-08-20T06:51:44.937 に答える
4

この StackOverflow の回答をご覧ください: https://stackoverflow.com/a/9790475/2619912

他のクラスを拡張するクラスですが、オブジェクトも拡張するため、2 行ではなく 1 行の継承になります。

于 2013-08-20T06:51:26.283 に答える
3

Java での多重継承の唯一の類似点はInterfaces. クラスは複数のインターフェースを実装できます。

Objectクラスは多重継承の例ではありません。質問を誤解している可能性があります。

于 2013-08-20T06:51:14.857 に答える
3

これは、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 は多重継承をサポートしていません。

于 2013-08-20T06:56:06.110 に答える
2

答えは、Java は複数レベルの継承をサポートしていますが、多重継承はサポートしていないということです。

于 2013-08-20T06:54:02.010 に答える
1

Java クラスは、単一の親クラスの直接の子にしかなれません。祖父母を持つことはできますが、2 番目の親を持つことはできません。それは、実の母親が一人いるようなものです。実の母親を複数持つことはできませんが、祖母を持つことはできます。

于 2013-08-20T06:51:48.083 に答える
1

クラス A とクラス B があるとします。次に、クラス Derived を定義します。多重継承とは、クラス Derived がクラス A とクラス B の両方を継承できることを意味します。しかし、これは Java では不可能です。したがって、多重継承はサポートされていません。

于 2013-08-20T06:53:20.443 に答える
1

Que: Java が多重継承をサポートしていないとどうして言えますか? Object クラスが Java のすべてのクラスの親である場合。

Object はすべてのクラス (父、祖父、曽祖父など) の祖先ですが、すべてのクラスには 1 つの父しかありません (指定されていない場合、それは Object クラスです)。

于 2013-08-20T06:56:28.273 に答える
0

最初のケース: 継承を使用せずにクラス A を作成するとします。デフォルトでは、Object クラスから派生します。

2 番目のケース: クラス A を拡張するクラス B を作成するとします。クラス A には Object クラスのすべてのフィールドが含まれるため、クラス B にも継承によってそれらが含まれます。である class B extends A(which extends Object)ため、B は A のサブクラスであり、Object のサブクラスでもあると言えます。

于 2013-08-20T07:04:41.043 に答える