如何解释Java中的多重继承
事实上,这个问题是由一位面试官提出的 Que:你怎么能说java不支持多重继承? 如果对象类是java中所有类的父类 这个问题我没有答案 这意味着对java概念没有清晰的认识:-( 例: 如果A扩展B 这里已经有一个扩展对象类了,对吗? 现在它是如何工作的如何解释Java中的多重继承,java,Java,事实上,这个问题是由一位面试官提出的 Que:你怎么能说java不支持多重继承? 如果对象类是java中所有类的父类 这个问题我没有答案 这意味着对java概念没有清晰的认识:-( 例: 如果A扩展B 这里已经有一个扩展对象类了,对吗? 现在它是如何工作的 请分享您的答案。多重继承是指单个类可以从多个类扩展而来。这在java中是不可能的。请参见此处: 当您在Java中执行class A扩展B时,那么A只扩展B,而不是Object,B依次扩展对象(或任何其他最终将扩展对象的对象)多重继承应允许一个
请分享您的答案。多重继承是指单个类可以从多个类扩展而来。这在java中是不可能的。请参见此处:
当您在Java中执行
class A扩展B
时,那么A
只扩展B
,而不是Object
,B
依次扩展对象(或任何其他最终将扩展对象的对象)多重继承应允许一个类继承多个父类。但Java不允许这样做,因为它可能会创建
考虑到对象
类是父类,然后在继承层次结构中有许多类,它被称为
旁注:
C#允许子类单独实现多个父类的方法,即使它们具有相同的签名多重继承意味着单个类可以从多个类继承。换句话说,它可以有多个父类
对于面试官引用的对象
类示例,有两种可能性:
面试官自己对多重父类(多重继承)和多重子类感到困惑
或者他想用这个问题欺骗你
父类可以有许多子类,这些子类与多重继承无关。请参考以下内容:
在对象类与其他类的情况下,它实际上不是多重继承……正如所说,它是一个类可以从多个类扩展而来的地方。java中多重继承的唯一相似之处是接口。
一个类可以实现多个接口
对象
类不是多重继承的示例。可能是您误解了这个问题。看看这个答案:
您的类扩展了另一个类,但它也扩展了对象,所以您仍然处于一行继承中,而不是两行继承中
最重要的是保持语言设计简单
还有我经常遵循的例子
1) 我们有两个类B和C继承自A
2) 假设B和C覆盖了一个继承的方法,它们提供了自己的实现
3) 现在D继承了B和C的多重继承D应继承该重写方法,将使用哪个重写方法?它是从B还是从C
这里我们有一个模棱两可的地方
要克服这一点,我们有接口和多级继承
编辑:
And here A is already extending Object class.
它从来没有被称为多重继承
。它被称为多级继承。
在多层次上,
继承涉及许多类,但一个类只扩展一个。最低的子类
可以使用其所有的超类
”内容。java类只能是单个父类的直接子类。它可以有祖父母,但没有第二个父母。
这就像有一个单亲亲生母亲。你不能有一个以上的亲生母亲,当然你可以有一个祖母。让我们分为a类和B类。
现在我们定义一个派生类。
多重继承意味着:派生类可以同时继承类A和类B。
但这在Java中是不可能的。因此它不支持多重继承。答案是Java支持多级继承,但不支持多重继承 这是对Java的常见误解
多重继承的工作方式(C++和Python)是这样的。
Parent1 Parent2 Parent3
| | |
_______________________
|
v
Child
Object
|
v
Child1
|
v
Grandchild
这意味着Child
将从所有父级继承属性和方法
然而,在Java中,继承是这样工作的
Parent1 Parent2 Parent3
| | |
_______________________
|
v
Child
Object
|
v
Child1
|
v
Grandchild
因此,对象是所有类的超类,但它不是所有类的直接父类。然而,Java确实提供了一种通过接口
Object
|
v
Child <--- Interface
|
v
Grandchild
对象
|
v
小孩
问:你怎么能说java不支持多重继承?如果对象类是java中所有类的父类
对象是所有类(父类、祖父类、曾祖父类等)的祖先,但每个类只有一个父类(如果未指定,则为对象类)。第一种情况:假设您在不使用继承的情况下创建类a。默认情况下,它是从对象类派生的
第二种情况:假设您创建了扩展类A的类B。类A包含来自对象类的所有字段,因此类B也将通过继承包含这些字段。它是
类B扩展了A(它扩展了对象)
,所以可以说B是A的子类,也是对象的子类。多重继承是关于多重直接继承的
单个类不能有两个直接父类。不过,它可以有一个祖父母班
A扩展B
和B扩展C
,与A同时扩展B和C
不同
不允许这样做的原因是,当您遇到以下情况时,为了简单起见:
A extends both B and C
B extends D
C extends D
如果您有这样的案例,然后您有以下代码:
A a = new A();
a.someAbstractOrVirtualMethodOnD();
。。。是