Java中与多重继承相关的混淆

Java中与多重继承相关的混淆,java,Java,我对java继承感到困惑。正如我所研究的,Java不支持多重继承。所以它根本就没有继承钻石的问题 但是,默认情况下,Java的每个类都继承对象类,如果我们扩展一个类,那么就有两个继承的类,第一个是Object,第二个是我们继承的类。正如我所知,如果任何类继承两个或多个类,则称为多重继承。它表明java支持多重继承,因为它同时继承两个类 那么为什么它说java不支持多重继承,java中有没有可能出现菱形问题呢 由于所有类都扩展了对象,因此根据定义,您正在扩展的基类已经扩展了对象。您的类不需要添加对

我对java继承感到困惑。正如我所研究的,Java不支持多重继承。所以它根本就没有继承钻石的问题

但是,默认情况下,Java的每个类都继承对象类,如果我们扩展一个类,那么就有两个继承的类,第一个是Object,第二个是我们继承的类。正如我所知,如果任何类继承两个或多个类,则称为多重继承。它表明java支持多重继承,因为它同时继承两个类

那么为什么它说java不支持多重继承,java中有没有可能出现菱形问题呢

由于所有类都扩展了
对象
,因此根据定义,您正在扩展的基类已经扩展了
对象
。您的类不需要添加对象本身,因为它已经存在于层次结构中


这意味着,
Object
在您的层次结构中仅作为根存在一次,因此没有“菱形”

在继承的情况下,您误解了类扩展对象的概念

只有继承层次结构中的顶级类扩展自
对象
类,而层次结构中较低的其他类扩展直接的超类。因此,通过
继承
的层次结构,他们拥有
对象
类的所有方法,并且不涉及
多重继承

public class A {  // Extends from `Object` class
}

class B extends A { // Extends from `A`
}

class C extends B { // Extends from `B`
}

因此,层次结构中不会出现
diamond
问题。

在Java中,一次只能从一个不同的类继承。该不同的类可能从另一个类继承,但是您没有一个类从多个不同的类继承…

您从中扩展的类已经从对象扩展。当您从新类扩展时,实际上您停止直接从对象扩展,而是通过新的直接祖先继承它

所以,不是从两个不同的类进行扩展,而是从一个本身已经从另一个类(即对象类)进行扩展的类进行扩展

从视觉上看,多重继承将是:

  A  Object
  |   |
    C
但你所描述的情况实际上是:

Object
  |
  A
  |
  C

您可以有多个
祖先
,但只有一个父级。这里的祖先是指对象类,其中父类是指要扩展的类。

通过指定要继承的类,可以覆盖默认的扩展对象。因此,只有在不指定要继承的类时,类才会扩展对象

但是,默认情况下,Java的每个类都继承对象类,如果我们扩展一个类,那么就有两个继承类,第一个是对象,第二个是我们继承的类

部分正确

如果显式地扩展一个类,那么它不会扩展
Object
class

如果你有课

class A
{

}
然后,编译器将其更改为

class A extends Object
{

}
但是,如果您明确地扩展了一个类,如下所示

class A extends AnotherClass
{

}
编译器现在不会添加任何内容,因此没有多重继承

Java supports only syntactical multiple inheritance. Java does not 
supports  implementation of multiple inheritance.
有人说java支持通过接口进行多重继承,但这里的解释不正确:

遗产: 从一个类对象到另一个类对象获取属性:

Class A{}

Class B extends A {}
这里是一个B类对象,它获取属性(方法/函数/&数据成员/类变量) 属于甲级

java不支持使用类的多重继承的原因:

Class A{}
Class B{}
Class C extends A,B{}
X--此语句导致错误,因为类A从A和B两侧获取对象类的对象

每个java类默认扩展对象类的对象,对象类的对象是根对象,表示所有类的超类

但是这里C类有两个对象的超类,所以给出错误意味着java不支持使用类进行多重继承

Is java使用接口支持多重继承:

由于这个接口概念,我们中只有少数人说java支持多重继承,但这是错误的

解释如下: (或)

在这里,它看起来像多重继承,但继承意味着将属性从一个类对象获取到另一个类对象

在接口概念中,我们根本没有得到任何属性,而是在类中实现接口的未实现方法

所以继承和接口是完全相反的

最后,java只支持多重继承的语法,不支持多重继承的实现

Java supports only syntactical multiple inheritance. Java does not 
supports  implementation of multiple inheritance.
继承类似于借方,接口类似于贷方,但接口在服务器端编程等其他概念中有其自身的重要性

看到了吗

                     OBJECT CLASS
                           |
                           |
                     CLASS A{} //Class A extends class Object
                           |
                           |
                     CLASS B{} //Class B extends class A
                           |
                           |
                     CLASS C{}//Class C extends class B
因为每个类都是从对象类继承的,所以从其他类继承时就不是这样了。因此,对象类将成为所有其他继承类的超级类或根类


那有什么问题

谢谢。。我明白了,这意味着每个类中只有一个对象类成员的副本。所以不会有多重继承。@MouseCrasher你从根本上误解了继承的概念。您所说的是聚合和/或组合。当类A从
对象继承时,这并不意味着类A的实例有一个成员是
对象
,这意味着类A是一个
对象
@MouseCrasher:你得到了它,但你解释它的方式完全错了。在
类A
@Azodious:
类A扩展另一个类的每个实例中将有一个类对象(对象实例的)副本{}编译器现在不会添加任何内容,因此没有多重继承。

这是不正确的。即使我说
类A扩展了另一个类
,我也可以重写类A中对象类的方法。这意味着类A仍然有(m)的副本
                     OBJECT CLASS
                           |
                           |
                     CLASS A{} //Class A extends class Object
                           |
                           |
                     CLASS B{} //Class B extends class A
                           |
                           |
                     CLASS C{}//Class C extends class B