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 { 

然后MySubClassMyClass扩展而来,它从Object扩展而来。 它是一个传递性inheritance关系,它只在一个方向上发生:在层次结构中没有任何一点,单个类可能从多个类扩展 – 这就是为什么我们说在Java中我们有单inheritance(相反) to:多重inheritance。)

inheritance自ObjectBinheritance自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机制也不例外。