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.
在你的问题中A directly inherit B
和Object class
由Binheritance,而不是由A
inheritance。这称为传递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
不直接从Object
inheritance,只从A
inheritance。
你是从术语的角度单独询问,还是有一些你感兴趣的行为 ?
对象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个类。 祝你好运!