10

其实这个问题是由一位面试官问的

问:你怎么能说java不支持多重继承呢?如果Object 类是 java 中所有类的父类。

这个问题我没有答案。

这意味着对 Java 概念没有清晰的概念:-(

例如:如果A 扩展 B

这里 A 已经在扩展 Object 类。对?现在它是如何工作的?

请分享你的答案..

4

14 回答 14

13

多重继承是关于多重直接继承。

单个类不能有两个直接父类。不过,它可以有一个祖父母类。

A extends BB extends C,等于A extends both B and C

不允许这样做的原因是为了简单起见,当您遇到以下情况时:

A extends both B and C

B extends D

C extends D

如果你有这样的情况,那么你有这个代码:

A a = new A();
a.someAbstractOrVirtualMethodOnD();

...您是在谈论 的B实现someAbstractOrVirtualMethodOnD(),还是C相同方法的实现?应该调用哪个?(提示:没有很好的答案)

所以,Java 禁止它。

implement注意,如果你有多个接口,你可以获得类似于多重继承的东西。但是由于只有一个具体的实现,所以不会混淆调用什么。

于 2013-08-20T07:17:29.740 回答
8

最重要的是保持语言设计简单

还有我经常关注的博客中的例子。

在此处输入图像描述

1)我们有两个类BC继承自A

2)假设BC正在重写一个继承的方法,并且它们提供了自己的实现。

3) 现在D继承自BC进行多重继承。D应该继承那个被覆盖的方法,会使用哪个被覆盖的方法?它会来自B还是C

这里我们有一个歧义。

任何克服这个问题的方法,我们都有接口多级继承

编辑 :

And here A is already extending Object class.

那永远不会被称为。那Multiple inheritance被称为Multi level inheritance.

在多层次中,

涉及许多类inheritance,但只有一个类扩展one。最低的subclass可以利用它的所有super classes内容。

于 2013-08-20T06:51:44.937 回答
7

多重继承意味着一个类可以从多个类继承。换句话说,它可以有多个父类。

对于Object面试官引用的课堂例子,有两种可能:

  1. 面试官自己对多父类(多继承)和多子类感到困惑。

  2. 或者他试图用那个问题来欺骗你

一个父类可以有许多子类,这与多重继承无关。

于 2013-08-20T06:50:11.960 回答
4

看看这个 StackOverflow 答案:https ://stackoverflow.com/a/9790475/2619912

您的类扩展了另一个类,但它也扩展了 Object,因此您仍然处于一行继承中,而不是两行。

于 2013-08-20T06:51:26.283 回答
3

多重继承是单个类可以从多个类扩展的地方。这在java中是不可能的。见这里:http ://en.wikipedia.org/wiki/Multiple_inheritance

当您class A extends B在 Java 中执行时,则仅A扩展B,而不是Object. B反过来扩展Object(或其他任何东西,最终将扩展对象)

于 2013-08-20T06:49:23.907 回答
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 不允许这样做,因为它可能会产生Diamond 问题

关于Object类是父类,然后在继承层次结构中有许多类,称为多级继承

边注:

C#允许通过接口进行多重继承,即使它们具有相同的签名,也允许子类型分别实现多个父类型的方法

于 2013-08-20T06:49:53.940 回答
1

请参考:http ://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

在 Object 类到其他类的情况下,它实际上不是多重继承......如前所述,它的单个类可以从多个类扩展......

于 2013-08-20T06:50:57.017 回答
1

java 类只能是单个父类的直接子类。它可以有祖父母,但没有第二父母。这就像有一个单亲生母亲。你不能有一个以上的亲生母亲,当然你可以有一个祖母。

于 2013-08-20T06:51:48.083 回答
1

假设有一个类 A 和类 B。现在我们定义一个类 Derived。多重继承意味着:派生类可以同时继承A类和B类。但这在Java中是不可能的。因此它不支持多重继承。

于 2013-08-20T06:53:20.443 回答
1

问:你怎么能说java不支持多重继承呢?如果 Object 类是 java 中所有类的父类。

Object 是所有类(父亲、祖父、曾祖父等)的祖先,但每个类只有一个父亲(如果未指定,则为 Object 类)。

于 2013-08-20T06:56:28.273 回答
0

第一种情况:假设您创建了一个类 A 而不使用继承。默认情况下,它是从 Object 类派生的。

第二种情况:假设您创建了扩展类 A 的类 B。类 A 包含 Object 类的所有字段,因此类 B 也将通过继承包含它们。它是 class B extends A(which extends Object),所以你可以说 B 是 A 的子类,也是 Object 的子类。

于 2013-08-20T07:04:41.043 回答