一、基本作用
在 Java 中所有的类都有一个公共的父类 Object,一个类只要没有明显的继承一个类,则肯定是 Object 的子类。
//这两行代码表示的含义是一样的
class Person extends Object{}
class Person{}
class Demo{}//定义 Demo 类,实际上继承 Object 类
public class Test{
public static void main(String[] args) {
Demo d = new Demo();//实例化 Demo 对象
System.out.println("不加toString()输出:" + d);
System.out.println("加toString()输出:" + d.toString());
}
}
- 4
- 5
- 6
- 7
- 8
- 9
程序随机输出了一些地址信息,加不加 toString() 最终的输出结果都是一样的,对象输出时会自动调用 Object 类中的 toString() 方法打印内容,所以利用此特性可以通过 toString() 可以取得一些对象的信息。
字符串内容就是对象的类型+@+内存地址值
- equals()
Object 类中的 equals() 方法实际上也是可以使用的,但是其默认使用的是按地址进行比较的,并不能对内容进行比较
三、接收任意引用类型的对象
既然 Object 类是所有对象的父类,则所有的对象都可以向 Object 进行转换,在这其中也包含了数组和接口类型,即一切的引用数据类型都可以使用 Object 进行接收。
interface A{//定义接口 A
public String getInfo();//定义抽象方法
}
class B implements A{
public String getInfo(){
//覆写接口中的抽象方法
return "Hello World!!!";
}
}
public class Test{
public static void main(String[] args) {
A a = new B();//为接口实例化
Object obj = a;//对象向上转型
A x = (A)obj;//对象向下转型
System.out.println(x.getInfo());
}
}
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
虽然接口不能继承一个类,但是依然是 Object 类的子类,因为接口本身是引用数据类型,所以可以进行向上转型操作。
同理也可以使用 Object 接收一个数组,因为数组本身也是引用类型。
public class Test{
public static void main(String[] args) {
int temp[] = {1,3,5,7,9};//定义数组
Object obj = temp;//使用 Object 接收数组
print(obj);//传递数组引用
}
public static void print(Object o){//接收一个对象
if(o instanceof int[]){//判断对象的类型
int x[] = (int[])o;//向下转型
for(int i=0;i<x.length;i++){//循环输出
System.out.println(x[i] + "\t");
}
}
}
}
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
以上程序使用 Object 接收一个整型数组,因为数组本身属于引用数据类型,所以可以使用 Object 接收数组内容,输出时通过 instanceof 判断是否是一个整型数组,然后进行输出操作。
因为 Object 类可以接收任意的引用数据类型,所以在很多的类库设计上都采用 Object 作为方法的参数,这样操作会比较方便