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

Abh*_*hri 13 java oop inheritance multiple-inheritance

事实1:

Java不支持多重继承.

事实2:

Object是所有其他类的超类

如果我有一个类Parent和一个Child继承该类的类Parent:

class Parent {

}

class Child extends Parent {

}
Run Code Online (Sandbox Code Playgroud)

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

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

选项1:

在此输入图像描述

选项2:

在此输入图像描述

Max*_*mer 26

它是选项2.如果你定义一个超类,那将是你班级的直接超类.如果你没有定义一个,Object将是直接的超类.

class Parent {

}

class Child extends Parent {

}
Run Code Online (Sandbox Code Playgroud)

相当于

class Parent extends Object {

}

class Child extends Parent {

}
Run Code Online (Sandbox Code Playgroud)

因此,虽然Object是所有类的超类,但在到达之前,类层次结构中可能会有一些步骤Object.它不是所有类的直接超类.

  • @AbhishekKeshri No. Child通过**Parent继承Object**. (6认同)

And*_*lko 8

Object 可能不是直接的父母,但它总是超级父母.

Child extends Parent
Parent extends Object

 |
 V

Child [indirectly] extends Object
Run Code Online (Sandbox Code Playgroud)


LuC*_*Cio 6

JavaDoc的说:

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

如果一个类没有通过使用关键字extends对其进行十进制来扩展任何其他类,则它会从隐式扩展中扩展Object.

文件说:

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

请参阅JLS中示例8.1.4-1 " 直接超类和子类 " ,第8.1.4节

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

此外,文件说:

类可以从派生自类的类派生的类派生,依此类推,最终派生自最顶层的类Object.据说这样一个类是继承链中所有类的后代Object.

JLS声明它简短而正式:

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

因此,class Object是所有类的超类.

但文档还说:

Excepting Object,没有超类,每个类都有一个且只有一个直接超类(单继承).

继续这个例子,class ColoredPoint extends Point { int color; }" 是类的直接子类Point. " 通过传递关系,它是类的(非直接)子类Object.

总结:
Object要么是直接超类,要么是传递关系,是任何其他类的最后一个超类.

回答问题:

  • Java不支持多重继承:它以传递方式提供单一继承.每个班级只直接延伸一个超级课程.
  • 是怎样的关系:类Parent对应的类Point和类Child的类ColoredPoint的JLS的例子.只有选项2显示了这种关系.


cod*_*ver 5

那是一个有趣的讨论.我认为这将是选项2.如果你尝试下面的代码.

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());

 }
Run Code Online (Sandbox Code Playgroud)

您将获得输出:

class java.lang.Object 
class Parent
Run Code Online (Sandbox Code Playgroud)