为什么Java中的每个对象都隐式扩展java.lang.Object类?

2022-09-01 03:37:44

我已经用Java编程了很长一段时间,但是当我试图向朋友解释什么是类时,我无法想出一个简单的单行代码:java.lang.Object

Java 中的所有对象都隐式扩展java.lang.Object

我不太确定为什么它应该这样做。

所以,我查看了GrepCode上的源代码,希望我能找到一些线索。现在我知道了a是什么以及它的作用,我想知道是否有任何具体原因可以解释为什么它以这种方式设计。java.lang.Object

我的问题仍然占上风:为什么每个对象都要扩展?java.lang.Object


答案 1

我想说的是,原因是为Java中的所有对象提供一个通用的API,以支持基本功能,例如

  • 同步 - 、 、waitnotifynotifyAll
  • 垃圾回收 - finalize
  • 集合支持 - ,hashCodeequals
  • 对象克隆 - clone

和每个对象

  • 有一个它所属的类 -getClass
  • 可以把自己表示为一个字符串,因为我们是人类,可以读取字符串——toString

答案 2

我认为最重要的用途不是提供类似的通用方法,而是提供一种包含所有引用类型的通用类型。ObjecttoString()

C++没有等价物,人们仍然很开心。但是由于Java没有指针和类似C++模板,因此需要使s等的实现成为可能。ObjectObjectCollection

另请参阅有关引用和基元类型的讨论。