【问题标题】:How can a class extend two classes in Java?一个类如何在 Java 中扩展两个类?
【发布时间】:2013-06-18 23:01:21
【问题描述】:

如果Java只能扩展一个类,而每个类都扩展java.lang.Object,那它怎么能扩展另一个类呢?怎么每个班都没有写extends Object

【问题讨论】:

标签: java class object extend


【解决方案1】:

在面向对象编程 (OOP) 中,继承描述了对象的两种类型或类之间的关系,其中一种被称为另一种的子类型或子类型。

A -> B -> C -> D

子级继承父级的功能,允许共享功能。例如,可以创建一个变量类 Animal 具有诸如吃等特征;然后定义一个子类型 Dog 来继承这些特性,而无需显式编程它们,同时添加新特性,如追猫。

多重继承允许程序员同时使用多个层次结构,例如允许 Dog 继承 Robot character 和 Animal 并访问所有这些类中的特性。

        A
       / \
      C   D
       \ /
        E 

Java 使用第一个模型,因此从对象和另一个类继承不会导致问题,因为它本质上是分层的。

Object -> Animal -> Dog -> Pit Bull

每个对象都不需要扩展 Object 的原因是因为它是隐式发生的。

【讨论】:

    【解决方案2】:

    Java 中的每个类隐式扩展类Object,而你只能再扩展一个类,以及无限数量的接口。

    如果您不编写构造函数,则与每个类都有一个默认构造函数一样。

    所以当你说

    class A{
    
    }
    

    实际上是这样的:

    class A extends Object{
        A(){
            super();
        }
    }
    

    但是当你说当你说的时候

    class B extends A
    

    在这种情况下,B 类将具有 A 类的特性,并且由于 A 扩展了 Object,B 类也将继承 Object 类。

    A -> 对象
    B -> A
    所以
    B -> 对象

    【讨论】:

      【解决方案3】:

      由于 java.lang.Object 是 Java 中每个对象的父对象,因此您不必显式编写 extends Object

      你总是可以扩展任何类。如果您需要 2 个类的行为 - 您需要为此使用接口

      【讨论】:

        【解决方案4】:

        这是一个显示 Java 的 java.lang.Number 类的类层次结构的示例。

        http://docs.oracle.com/javase/tutorial/java/data/numberclasses.html

        如您所见,Integer 类继承自 Number,而 Number 继承自 Object。因此,您可以通过链接它们来继承多个类。

        【讨论】:

          【解决方案5】:

          以下每个都可以将对象向左扩展:
          对象 -> 车辆 -> 汽车 -> Coupe -> Camaro

          例如,Coupe 扩展了Car,而不是(直接)扩展了Object...只是如果你继续往上走,你最终会到达Object

          但是,您不能让 Coupe 扩展 CarTruck

          【讨论】:

            【解决方案6】:

            Java不支持多重继承,只能直线继承(可以这么说)。不过,您使用的是 IMO 更强大的接口。我从不需要多重继承,但我大量使用接口。 基本上不是创建第二个类,而是定义一个接口,然后让某个类实现它。这可以是不同的类,也可以是相同的。

            所有的类都已经派生自Objects,你不需要专门写。

            【讨论】:

              【解决方案7】:

              您被允许扩展的唯一一个也最终扩展了 Object 类。因此您不会扩展两次。

              【讨论】:

                【解决方案8】:

                如果java只能扩展一个类,而每个类都扩展java.lang.Object,那它怎么能扩展另一个类呢?

                当您说 A 扩展 B 时,这意味着 A 扩展 B 并且 B 扩展 Object。一个类可以从另一个类继承,而另一个类可以从另一个继承,并且在链的顶部是java.lang.Object。 Java 不支持多重继承,但支持多级继承。

                为什么每个班级都没有写“扩展对象”?

                所有类都隐式扩展Object,所以会是冗余编码。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-11-11
                  • 2013-10-08
                  • 1970-01-01
                  • 2016-03-25
                  • 2011-09-29
                  • 2013-02-14
                  • 1970-01-01
                  相关资源
                  最近更新 更多