object类是所有引用数据类型的共同祖先,所有类无论是否显式声明extends都默认继承它,数组和包装类也直接或间接继承,其核心方法如tostring()、equals()、hashcode()等构成对象通用行为契约。

Object 类就是所有引用数据类型的共同祖先。
所有类默认继承 Object
Java 规定,每个类无论是否写 extends,都自动成为 Object 的子类。你写 class A { },它等价于 class A extends Object { }。这种隐式继承不是可选项,而是编译器强制行为,确保整个类型系统有统一的起点。
- 显式继承其他类(如
class B extends A)时,A 若没指定父类,也继承自 Object,所以 B 仍间接继承 Object - 数组是引用类型,
int[]、String[]等都直接继承自 Object,能调用toString()、getClass()等方法 - 接口本身不继承 Object,但实现该接口的类会继承 Object;用 Object 引用变量可以接收任意对象,例如
Object obj = new ArrayList();
核心方法是通用能力的基础
Object 提供的方法不是摆设,而是所有对象共有的最小行为契约。比如:
-
toString():默认返回
类名@十六进制哈希值,重写后让打印更可读 - equals(Object obj):默认按内存地址比较,业务中常重写为按字段内容判断相等
-
hashCode():配合
equals()使用,两个equals返回 true 的对象必须有相同hashCode,否则 HashMap 等集合会出错 - getClass():返回运行时真正的类对象,是反射和类型判断的入口
基本类型不继承,但包装类继承
注意区分:int、boolean 等基本类型不是对象,不继承 Object;但它们的包装类 Integer、Boolean 是类,属于引用类型,自然继承 Object。自动装箱(如 Integer i = 100;)后,这个 i 就是一个真正的 Object 子类实例,能调用所有 Object 方法。
为什么设计成单根继承
统一祖先带来实际好处:
- 所有对象都能被
Object类型变量安全引用,支撑泛型擦除后的运行时兼容 - 集合框架(如
ArrayList<object></object>)无需为每种类型重复定义基础操作 - 异常体系、I/O 流、反射机制等底层设施依赖 Object 提供的一致行为
- 避免多继承带来的歧义,简化语言模型和 JVM 实现











