Java中Object类是所有类的强制根父类,由编译器自动隐式插入extends Object,而非手动编写;它提供toString、equals、hashCode等通用方法,支撑泛型、异常、集合、线程通信等核心机制。

Java 中 Object 类成为所有类的根,靠的不是你写 extends Object,而是编译器在编译时自动补上的隐式继承。
编译器自动插入 extends Object
只要你定义一个类,没写 extends,javac 就会在字节码层面悄悄加上 extends java.lang.Object。比如:
-
class Dog { }→ 实际等价于class Dog extends Object { } - 哪怕你写了
class Cat extends Animal,只要Animal没显式继承别的类,它最终也还是Animal extends Object - 连数组、枚举、注解、Lambda 生成的合成类,都直接或间接继承自 Object
Object 是语言层面强制规定的根
这不是约定俗成,而是 Java 语言规范明确要求的:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 所有引用类型(包括 class、interface 的实现类、数组)都必须能向上转型为 Object
- 这样才能让
Object obj = new ArrayList();或Object[] arr = new String[3];合法 - 泛型擦除后保留的原始类型、异常处理中的
catch (Throwable t)底层依赖的也是这个统一根
Object 提供的通用能力支撑整个体系
正因为所有类都继承 Object,才天然具备几组关键行为:
-
toString():让任意对象可转成可读字符串,调试和日志离不开它 -
equals()和hashCode():集合类(HashMap、HashSet)正确工作的基础 -
wait()/notify()/notifyAll():线程通信的原始入口,synchronized 块调用它们不报错 -
getClass():运行时获取真实类型,反射和类型判断绕不开
你不需要、也不应该显式写 extends Object
虽然语法上允许 class A extends Object,但这么做没实际价值:
- IDE 通常会标灰提示“redundant superclass”
- 增加代码噪音,还可能误导新人以为这是可选操作
- 真正要做的,是根据业务需要重写
toString、equals、hashCode等方法,而不是强调继承关系本身
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










