在JDK中提供了一个Object类,它是所有类的父类,即每个类都直接或间接继承自该类。先来看一个例子。
//定义Animal 类 class Animal { // 定义动物叫的方法 void shout() { System.out.println("动物叫!"); } } // 定义测试类 public class Example { public static void main(String[] args) { Animal animal = new Animal(); // 创建Animal 类对象 System.out.println(animal.toString()); // 调用toString()方法并打印 } }
运行结果:
Animal@15db9742
在例中,第13行代码调用了Animal对象的toString()方法,虽然Animal类并没有定义这个方法,但程序并没有报错。这是因为Animal默认继承自Object类,在Object类中定义了toString()方法,在该方法中输出了对象的基本信息。
Object类的toString()方法中的代码具体如下:
getClass().getName()+"@"+Integer.toHexString(hashCode());
为了方便初学者理解上面的代码,接下来分别对其中用到的方法进行解释,具体如下:
getClass().getName()代表返回对象所属类的类名,即Animal。
hashCode()代表返回该对象的哈希值。
Integer.toHexString(hashCode())代表将对象的哈希值用16进制表示。
其中,hashCode()是Object类中定义的一个方法,这个方法将对象的内存地址进行哈希运算,返回一个int类型的哈希值。
在实际开发中,通常希望对象的toString()方法返回的不仅仅是基本信息,而是一些特有的信息,这时重写Object的toString()方法便可以实现。
//定义Animal 类 class Animal { // 重写Object 类的toString()方法 public String toString() { return "I am an animal"; } } // 定义测试类 public class Example { public static void main(String[] args) { Animal animal = new Animal(); // 创建Animal 对象 System.out.println(animal.toString()); // 打印animal 的toString()方法的返回值 } }
运行结果:
I am an animal
在例子的Animal类中重写了Object类的toString()方法,当在main()方法中调用toString()方法时,就打印出了Animal类的描述信息“Iamananimal”。