由于所有类都扩展对象,并且对象是一个类,因此对象如何扩展对象?

时间:2018-08-12 04:10:09

标签: java object inheritance

这实际上不是一个编程问题,但是最近我一直在做很多Java,并且对语言感到好奇。这个问题是不言自明的。所有类都扩展Object,并且Object必须是一个对象,因为类extend是对象。而且由于对象是类,所以如果Object本身是类,Object如何扩展Object?如果我创建一个自身扩展的对象,则会得到:Cycle detected: the type MovingObject cannot extend/implement itself or one of its own member types

那么,如何解释呢?

编辑:我不会将其称为重复项,因为将其标记为重复项的问题是要求提供不扩展Object的类的列表。我在问对象(如果所有类都对其进行扩展)如何扩展自身。

1 个答案:

答案 0 :(得分:3)

java.lang.Object以这种方式很特殊。 Java语言规范的8.1.4部分指出:

  

extends子句一定不能出现在Object类的定义中,否则会发生编译时错误,因为它是原始类并且没有直接的超类。

如果查看Java标准库的任何实现,您会发现java.lang.Object的源实际上没有扩展子句(并且因为Object类是原始类,并且在规范,则没有extends Object隐式存在)。

此外,您可能会发现Object.class.getSuperclass()的值恰好是空引用。

深入研究本机代码后,似乎经过了几层委派,here才强制执行了此规则。