Java中的多重继承是如何工作的?
类Java中的多重继承是如何工作的?,java,multiple-inheritance,Java,Multiple Inheritance,类对象是类层次结构的根。每个类都有对象作为超类。那么,如果我扩展一个API类,它会像多重继承一样吗?显然,Java不支持多重继承。那么它是如何工作的呢?不,对象将只是您创建的任何类的最终父类 多重继承意味着您可以编写一个扩展String和Integer的类,并获得每个类的属性。这不能用Java来完成。您可能想看看这是否是您想要做的事情超类与父类不同。你只能有一个母亲,但是你有更多的女性祖先。你的对象的超类也有一个超类,以此类推 所有对象都以java.lang.Object作为根节点形成一个树。不
对象
是类层次结构的根。每个类都有对象
作为超类。那么,如果我扩展一个API类,它会像多重继承一样吗?显然,Java不支持多重继承。那么它是如何工作的呢?不,对象将只是您创建的任何类的最终父类
多重继承意味着您可以编写一个扩展String
和Integer
的类,并获得每个类的属性。这不能用Java来完成。您可能想看看这是否是您想要做的事情超类与父类不同。你只能有一个母亲,但是你有更多的女性祖先。你的对象的超类也有一个超类,以此类推
所有对象都以java.lang.Object作为根节点形成一个树。不,它只是继承,一切照旧
grandparent
parent
child
孩子只有一个父母,
父母有祖父母(这在逻辑上没有意义,但无论如何:)
多重继承是指当您从两个不同的类继承时,不需要彼此有任何关系
donkey car
donkeycar
(正如您已经指出的,这在java中是不可能的)不
多重继承意味着您从两个类继承
class A {}
class B {}
class C extends A, B {}
这在Java中是不可能的
你能做的就是
class A {}
class B extends A {}
class C extends B {}
因此,您有多个超类,但只有一个父类。我的理解是,多重继承是水平工作的(多个父类直接继承到一个子类中),而不是垂直工作的(父类的父类),考虑到继承树
正如您所说,Java中只允许垂直继承。正如其他人所解释的,Java不支持多重继承。
但是,当您实现多个接口时,您可以(某种程度上)拥有多重继承:
interface Moveable {
void relocate(Coordinate position);
Coordinate getCurrentPos();
}
interface Tradeable {
void sell(BigInteger amount);
void buy(BigInteger amount);
}
interface Crashable {
void crash();
}
class Vehicle implements Moveable, Tradeable, Crashable {
}
现在Vehicle
应该从它实现的接口中删除所有方法。继承是可传递的。您扩展了一个API类,而该API类本身扩展了对象。所以你间接地扩展了对象。更短,如果A延伸B,B延伸C,那么A延伸C
这不是多重继承。“继承链”,如果你愿意,可以是你想要的长度。但最终,每件事的结尾都有对象
真正的多重继承将同时从两个不相关的类扩展而来。你不能在Java中这样做。我现在真的想要一辆驴车…;-)我很惊讶java没有用一种方便的方式来表达DoKeCar……但是在C++中,支持多继承的,你可以有多个母亲?面向对象编程中“继承”一词的含义与生物学意义大不相同;直接类比不起作用。是的,在C++中,你可以有多个母亲,母亲关系是与母类关系的类比。我看不出这个比喻有什么不对。我的意思是,它被植入了“父类”这个术语中。没错。你仍然可以有妈妈、爸爸、周末爸爸等等。现实世界中的类比有很多不同的可能性。术语“父类”也是错误的,因为它混淆了生物继承和面向对象编程继承。在OO中,子类实例是超类的实例(Liskov替换原理)。调用超类“Parent”和子类“Child”意味着:“孩子就是父母”。请注意,Java语言规范中也没有使用术语“父类”;它在那里被称为“直接超类”。