Java中的多重inheritance所有类都是从Object类扩展的?
我有一个简单的问题:
如果我声明一个类A – 意味着该类隐式inheritance自Object Class。
现在如果B类inheritance自A类
这个B类也不是从Object类inheritance吗?
如果是,这是否意味着编写关键字’extends’一些如何覆盖隐式inheritance(来自类Object)?
所有类都直接或间接地通过隐式或显式扩展formsObject
,Java中的整个类层次结构最终指向位于根的Object
。 例如,当你写这个:
public class MyClass extends Object {
与此完全相同:
public class MyClass {
如果我们有这个:
public class MySubClass extends MyClass {
然后MySubClass
从MyClass
扩展而来,它从Object
扩展而来。 它是一个传递性inheritance关系,它只在一个方向上发生:在层次结构中没有任何一点,单个类可能从多个类扩展 – 这就是为什么我们说在Java中我们有单inheritance(相反) to:多重inheritance。)
inheritance自Object
和B
inheritance自A
所以你有3个级别的inheritance(2个显式)。 这里没有多重inheritance。
`Object` | `A` | `B`
当你’扩展’时,你的类从基类中获取所有内容并添加额外的东西。 所以,如果A扩展了Object,你就得到了A中的所有Object。如果B扩展了A,它将获得所有的A,它也包含所有的Object。 所以,B现在有了对象,A和B本身的任何东西。
多重inheritance是指一次从多个事物中扩展一个类:
public class M extends SomeBase, AndAnotherBase {
这在Java中是不允许的。 它在允许它的语言中增加了复杂性,因为你最终可以使用由SomeBase,AndAnotherBase组成的类M ……并且如果它们都已经从Object派生…… M中将有2个对象。 这开始变得棘手,因为你必须知道你正在处理的M中的哪个对象。
你特别提到inheritance自Object
,但是如果你问的是儿童和孙子之间的inheritance,那么是的, B
将inheritance所有的前辈。
public class A{ public String getAString(){ return "Hello from A"; } } public class B extends A { public String getBString(){ return getAString() + " and Hello from B."; } } public class C extends B{ } public class Main{ public static void main(String[] args){ C c = new C(); // Inherited from A Inherited from B System.out.println(c.getAString() + "..." + c.getBString()); } }
这给了
Hello from A...Hello from A and Hello from B.
注意C
在类体中没有代码。 所有function都是inheritance的。
inheritance自Object
有点特殊,因为它是隐式的。 没有必要在任何类上使用extends Object
– 它是多余的。 但inheritance机制也不例外。