Object类如何成为子类的超类?

时间:2018-08-31 09:41:47

标签: java oop inheritance multiple-inheritance

事实1:

  

Java不支持多重继承。

事实2:

  

对象是所有其他类的超类

如果我有一个类Parent和一个类Child,它继承了类Parent

class Parent {

}

class Child extends Parent {

}

在这种情况下,如果Java不支持多重继承,类Child将如何继承Object类?

这三个之间的关系如何定义?

选项1:

enter image description here

选项2:

enter image description here

10 个答案:

答案 0 :(得分:25)

这是选项2。如果定义超类,则它将是您的类的直接超类。如果您未定义一个,则Object将是直接超类。

class Parent {

}

class Child extends Parent {

}

等同于

class Parent extends Object {

}

class Child extends Parent {

}

因此,尽管Object是所有类的超类,但在进入Object之前,类层次结构中可能会有一些步骤。它不是所有类的直接超类。

答案 1 :(得分:8)

Object可能不是直接父母,但始终是超级父母。

Child extends Parent
Parent extends Object

 |
 V

Child [indirectly] extends Object

答案 2 :(得分:6)

JavaDoc说:

  

Object是类层次结构的根。 ...

如果某个类没有通过使用关键字extends进行除垢来扩展任何其他类,则它会扩展,但从Object隐式扩展。

documentation说:

  

在没有任何其他显式超类的情况下,每个类都是   隐式地是Object的子类。

请参见Example 8.1.4-1

中的JLS, chapter 8.1.4直接超类和子类

它表明class Point { int x, y; }是对象的直接子类

此外,文档说:

  

类可以从以下类派生而来:   是从类等派生的,并最终从   最高级的课程,Object。据说这样的阶级是所有人的后代   继承链中的类可以追溯到Object

JLS声明它简短而正式:

  

子类关系是直接关系的传递闭包   子类关系。

因此,类Object是所有类的超类。

但是文档中还说:

  

除了Object(没有超类)外,每个类都有一个且只有一个直接超类(单个   继承)。

以示例class ColoredPoint extends Point { int color; }继续,“ 是类Point的直接子类。”。通过传递关系,它是类Object的(非直接)子类。

摘要:
Object是直接超类,或者通过传递关系是任何其他类的最后一个超类。

回答问题:

  • Java不支持多重继承:它以传递方式提供单一继承。每个班级都只直接延伸一个上等人。
  • 关系如何:类Parent对应于JLS的类Point,类Child对应于JLS的类ColoredPoint例。仅选项2 显示此关系。

答案 3 :(得分:5)

这是一个有趣的讨论。我认为这将是第二种选择。就像您尝试下面的代码一样。

public static void main(String []args){
      Parent p=new Parent();
      Class c= p.getClass();

      Child child =new Child();
      Class c1= child.getClass();
      System.out.println(c.getSuperclass());
      System.out.println(c1.getSuperclass());

 }

您将得到的输出为:

class java.lang.Object 
class Parent

答案 4 :(得分:3)

选项2,因为每个对象都派生Object.class方法

答案 5 :(得分:3)

正确的答案是选项2。任何Java类都为其父级继承所有父级。换句话说。

A级扩展了B级 B级延伸到C级 C类扩展了D类

X类扩展了A->,这意味着A继承了B,C和D的所有受保护/打包/公共字段。

在您的示例中,子类在传递模式下继承了父级属性,但也继承了对象属性。

答案 6 :(得分:3)

来自Class Object

  

public class Object
  类对象是类层次结构的根。
  每个类都将Object作为超类。
所有对象(包括数组)都将实现此类的方法。

这意味着每个Java类在层次结构中都以Object作为根,而不一定是其直接父级。

答案 7 :(得分:3)

在Java中,没有多重继承意味着一个类只能扩展1个类。有一个直接基类。间接地,一个类可以有许多祖先:Child具有Parent和Object作为祖先的“ super”类。

Object --> Parent --> Child
                  --> OtherChild

Relation: 1 --> N

像C ++中那样避免多重继承的原因是涉及的歧义:

假设多重继承的伪代码:

class A : Comparable
class B : Comparable

class Child : A, B {

    @Override A? B?
    int compareTo(Child rhs) { ... super.compareTo ? ... }
}

A a = new Child();
B b = new Child();
a.compareTo(b);

答案 8 :(得分:3)

首先,使用Java 8,有可能完成Multiple inheritance using Default methods of interfaces

第二,在“选项2”中正确表示了您对Object类的理解。
但是,它不是多重继承,而是多层继承。 “选项1”是多重继承。

请选中此link,以详细了解它们。

答案 9 :(得分:2)

选项2.Object是所有其他类的超类,但Object可能不是类的直接超类。