Java语言中的inheritance

我们说java遵循单个inheritance模型,即Java类最多只能扩展一个类。 然后说每个java类都是从Object类inheritance的。

假设有两个类A和B.A和B都从Object扩展。 现在假设A扩展B.是否意味着A具有多重inheritance(A是从B和Class对象inheritance)?

看看传递inheritance之间的区别(C直接从Binheritance,从A传递直接inheritance):

在此处输入图像描述

和多重inheritance(Cinheritance自A和B):

在此处输入图像描述

除了具有相同签名的方法之外,所有内容都被添加,这些方法被覆盖。 甚至添加了使用相同名称声明的变量,它们只是被称为“隐藏”但仍然可以使用强制转换访问,或者如果它是直接父级则可以访问。

 Excepting Object, which has no superclass, every class has one and | only one direct superclass (single inheritance). In the absence of any other explicit superclass, every class is implicitly a subclass of Object. 

AA

在你的问题中A directly inherit BObject class由Binheritance,而不是由Ainheritance。这称为传递inheritance

你可以拥有一个inheritance链,这不是多重inheritance。 您不能拥有一次从多个类inheritance的类。

被语言禁止:

 class A extends B, C {} 

多重inheritance:(不支持Java)

A类扩展了Object

B类扩展了Object

C类扩展A,B

  Object /\ / \ / \ AB (Not supported by Java) \ / \ / \ / C 

多级/传递inheritance:(由Java支持)

B类扩展了Object

A类extedns B.

  Object | | | B (Supported by Java) | | | A 

Java类只能直接从一个类inheritance。 在这种情况下, A直接Objectinheritance,只从Ainheritance。

你是从术语的角度单独询问,还是有一些你感兴趣的行为

对象A扩展了扩展Object的对象B. 它不是多重inheritance,而是层次结构

多inheritance的主要问题是模糊性,当两个类定义相同的方法并且同时被覆盖和钻石问题时 。 Java不会受此影响,因为它只允许覆盖一个类。 这显然是指直接覆盖,不涉及inheritance的层次结构。 这种inheritance(A overring B,B overriding等)不受任何问题的影响。

在Java中,每个类只能直接一个父类扩展。 因此,B从Object扩展而A从B扩展, x或 A和B都从Object扩展。

你假设两者同时都是正确的 – 这在Java中是不可能的。

如果B从Object扩展,A从B扩展,那么是,A确实从Objectinheritance,但每个类仍然有一个父级:

 class Object | +-- class B | +-- class A 

换句话说,Java不支持多重inheritance。

Java不会让你扩展超过1个超类。 但是,一个类可以实现多个接口。 您可以创建一个接口和抽象类的结构,让您破解扩展超过1个类。 祝你好运!