对象 class 怎么可能是子 class 的超 class?

How can the Object class be a super class of subclasses?

事实 1:

Java does not support multiple inheritance.

事实 2:

Object is a superclass of all other classes

如果我有一个 class Parent 和一个 class Child 继承了 class Parent:

class Parent {

}

class Child extends Parent {

}

这样的话,classChild如何继承Objectclass,如果Java不支持多重继承?

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

选项 1:

选项 2:

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

这是选项 2。如果您定义一个超级class,那将是您的 class 的直接超级class。如果你不定义一个,Object 将是直接的 superclass.

class Parent {

}

class Child extends Parent {

}

等同于

class Parent extends Object {

}

class Child extends Parent {

}

因此,虽然 Object 是所有 class 的上级 class,但在到达 [=12] 之前,class 层次结构中可能有一些步骤=].它不是所有 classes 的直接 superclass。

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

Object可能不是直接的parent,但它总是超级parent。

Child extends Parent
Parent extends Object

 |
 V

Child [indirectly] extends Object

正确答案是选项 2。任何 Java class 都继承其 parents 的所有 parents。也就是说。

Class A 扩展 Class B Class B 扩展 Class C Class C 扩展 Class D

Class X extends A -> 这意味着 A 继承了 B、C 和 D 的所有 protected/package/public 字段。

在您的示例中,Class Child 继承了 Parent 属性,但也继承了传递模式下的 Object 属性。

嗯,这是一个有趣的讨论。我认为这将是选项 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());

 }

您将得到如下输出:

class java.lang.Object 
class Parent

JavaDoc 说:

Class Object is the root of the class hierarchy. ...

如果 class 没有通过使用关键字 extends 对其进行贴标来扩展任何其他 class,它会从 Object.

隐式扩展

documentation 说:

In the absence of any other explicit superclass, every class is implicitly a subclass of Object.

Example 8.1.4-1 "Direct Superclasses and Subclasses" in JLS, chapter 8.1.4

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

此外文档说:

Classes can be derived from classes that are derived from classes that are derived from classes, and so on, and ultimately derived from the topmost class, Object. Such a class is said to be descended from all the classes in the inheritance chain stretching back to Object.

JLS 声明简短而正式:

The subclass relationship is the transitive closure of the direct subclass relationship.

因此 class Object 是所有 class 的超class。

但是文档还说:

Excepting Object, which has no superclass, every class has one and only one direct superclass (single inheritance).

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

的(非直接)subclass

总结:
Object 是直接上级 class 或通过传递关系成为任何其他 class.

的最后一个上级 class

回答问题:

  • Java不支持多继承:以传递的方式提供单继承。每个 class 只直接扩展一个 supercalss。
  • 关系如何:classParent对应classPoint和class Child 到 JLS 示例的 class ColoredPoint。只有 选项 2 显示了这种关系。

来自Class Object

public class Object
Class Object is the root of the class hierarchy.
Every class has Object as a superclass.
All objects, including arrays, implement the methods of this class.

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

没有多重继承意味着在 Java 中一个 class 仅扩展 1 class;有一个直接基地 class。间接地,一个 class 可以有很多祖先:Child 有 Parent 和 Object 作为祖先 "super" classes.

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

首先,使用Java8,可以完成Multiple inheritance using Default methods of interfaces

其次,您对对象 class 的理解在 'Option 2' 中得到了正确表达。
但是,它不是多重继承,而是多级继承。 'Option 1'是多重继承。

请查看此 link 以了解有关它们的更多信息。