【问题标题】:Multiple Inheritance in Java since All classes extend from Object class? [duplicate]Java中的多重继承,因为所有类都从Object类扩展? [复制]
【发布时间】:2014-01-04 02:35:02
【问题描述】:

我有一个简单的问题:

如果我声明一个类 A - 意味着这个类隐式继承自 Object Class。

现在如果 B 类继承自 A 类

这个 B 类也不是继承自 Object 类吗?

如果是,这是否意味着编写关键字“扩展”一些如何覆盖隐式继承(来自类 Object)?

【问题讨论】:

标签: java inheritance multiple-inheritance


【解决方案1】:

所有类都从Object 扩展而来,无论是隐式还是显式,直接或间接,Java 中的整个类层次结构最终都指向位于根的Object。例如,当你写这个时:

public class MyClass extends Object {

和这个完全一样:

public class MyClass {

如果我们有这个:

public class MySubClass extends MyClass {

然后,MySubClass 扩展自 MyClass,而 MyClass 扩展自 Object。这是一种传递继承关系,它只发生在一个方向上:在层次结构中的任何一点,单个类都不可能从多个类扩展 - 这就是为什么我们说在 Java 中我们有单一继承(相反to:多重继承。)

【讨论】:

    【解决方案2】:

    A 继承自 ObjectB 继承自 A。所以你有 3 个继承级别(2 个显式)。这里没有多重继承。

    `Object`
        |
       `A`
        |
       `B`
    

    【讨论】:

    • 所以 B 类不是直接继承自 Object !!hmm ....
    • @GV1234 不需要,因为A 正在扩展它。
    【解决方案3】:

    当您“扩展”时,您的类会从基类中获取所有内容并添加额外的内容。因此,如果 A 扩展了 Object,那么您就拥有了 A 中的所有 Object。如果 B 扩展了 A,它将获得 A 的所有内容,而 A 也拥有所有的 Object。所以,B 现在拥有 Object、A 和 B 本身的任何东西。

    多重继承是指一次从多个事物中扩展一个类:

    public class M extends SomeBase, AndAnotherBase {
    

    这在 Java 中是不允许的。它在允许它的语言中增加了复杂性,因为您最终可能会得到由 SomeBase、AndAnotherBase... 组成的类 M 并且如果它们都已经从 Object 派生... M 将有 2 个对象。这开始变得难以处理,因为您必须知道您正在处理 M 中的哪个对象。

    【讨论】:

      【解决方案4】:

      您特别提到从Object 继承,但如果您问的是子孙之间的一般继承,那么是的,B 将从所有前辈继承。

      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 在类主体中没有代码。所有功能都被继承。

      Object 继承有点特别,因为它是隐式的。没有必要在任何课程上说extends Object——这是多余的。但继承机制也不例外。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        相关资源
        最近更新 更多