object类是java所有类的最终父类,支撑多态泛用性:任意对象可自动向上转型为object,集合底层依赖object数组,核心方法(tostring、equals等)通过重写实现协议式多态,向下转型需instanceof保障安全。

Object类是Java中所有类的最终父类,这种设计直接支撑了多态的泛用性——它让任意对象都能被统一视为Object类型,从而在不预知具体类型的前提下参与通用操作。
统一引用入口:任何对象都能赋给Object变量
只要创建了对象,无论是否显式继承、是否自定义、是否是数组或包装类实例,它天然就是Object的子类。因此可以这样写:
- Object o1 = new String("hello");
- Object o2 = new ArrayList
(); - Object o3 = new Person("张三", 25);
这些语句无需强制转换,属于**自动向上转型**,编译器允许且安全。这正是泛用性的起点:你不需要为每种类型写一套处理逻辑,一个Object参数就能接收全部。
集合与容器的底层依赖
Java集合框架(如ArrayList、HashMap)早期未引入泛型时,内部存储结构完全基于Object数组:
- Object[] elementData = new Object[10];
- add(E e) 方法实际是把e转为Object存入;
- get(int index) 方法返回Object,调用方再按需向下转型。
即使现在有泛型擦除机制,运行时依然回归Object。这意味着泛型的类型安全是编译期保障,而运行时的承载层始终靠Object兜底——这是多态泛用性在JDK基础设施中的真实体现。
方法通用性来自可重写的核心行为
Object提供几个关键方法,它们默认实现较弱,但约定所有子类可重写,形成“协议式多态”:
- toString():打印对象时自动调用,各子类按需返回有意义字符串(如Person返回"name=张三,age=25");
- equals(Object obj):比较逻辑由子类定义(比如String按字符内容比,Date按毫秒值比);
- hashCode():必须与equals保持契约,支撑HashMap等散列结构正确工作;
- getClass():返回真实运行时类型,是判断和转型的可靠依据。
这些方法不依赖具体类型,却能因重写而表现出不同行为——这就是多态在行为层面的泛用:同一调用,千种响应。
向下转型需谨慎,但instanceof提供了安全边界
Object引用虽通用,但不能直接调用子类特有方法。想用,就得转型:
- Object o = new Dog();
- if (o instanceof Dog) { ((Dog) o).bark(); }
这里instanceof不是可选项,而是必要防护。它利用Object提供的getClass()能力,在运行时确认真实类型,避免ClassCastException。这种“先检查、再转型”的模式,正是泛用性与安全性之间的平衡点。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











