Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的多重继承是如何工作的?_Java_Multiple Inheritance - Fatal编程技术网

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语言规范中也没有使用术语“父类”;它在那里被称为“直接超类”。