java中object类是所有类的隐式父类,编译时自动添加extends object,强制继承并提供11个公共方法,支撑多态、泛型及反射等机制。

Java 中的 Object 类是所有类的隐式父类,不需要显式声明就能自动继承。它就像一棵树的根,无论你写的是 String、ArrayList,还是自己定义的 Student 或 Order 类,只要没用 extends 指定别的父类,编译器就会悄悄加上 extends Object —— 这个过程在编译阶段完成,不是运行时补的。
编译器自动补全父类关系
当你写一个空类:
class Dog { }
Java 编译器会把它等价处理为:
class Dog extends Object { }
反编译 Dog.class 文件能直接看到这个继承关系。这也说明:继承 Object 是语言层面的强制约定,不是可选行为。
所有对象天然拥有 Object 方法
因为继承关系存在,每个实例都能直接调用 Object 定义的 11 个公共方法,比如:
-
toString():打印对象时默认调用,否则输出类似com.example.Dog@1b6d3586 -
equals(Object):默认比较内存地址,但业务类常重写为按字段比对 -
hashCode():必须与equals()保持一致——相等的对象 hashCode 必须相同 -
getClass():返回运行时真实类型,不可被重写 -
wait()/notify():用于线程协作,基于对象监视器(monitor)实现
Object 是多态和泛型的底层支撑
正因为所有类都继承自 Object,才能做到:
- 用
Object obj = new String("hello");接收任意类型实例(向上转型) - 集合如
ArrayList在 Java 5 之前靠Object存储任意元素(泛型擦除后仍回归Object) - 反射中
Method.invoke()返回值统一为Object,由调用方自行转型
注意几个关键细节
Object 类本身没有父类,位于类继承链顶端;它在 java.lang 包中,无需 import;它的构造方法 public Object() 总会在子类构造器第一行被隐式调用(相当于 super())。
虽然数组不是类,但 Java 规定数组也继承 Object,所以 int[]、String[] 都能调用 toString() 和 clone() 等方法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











