Object 类是比较特殊的类,它是所有类的父类,是 Java 类层中最高层的类。用户每创建一个类时,除非已经指定要从其他类继承,否则默认就是从 java.lang.Object 类继承而来的。Java 中每个类都源于 java.lang.Object 类,如 String、Integer 等类都是继承于 Object 类;除此之外,自定义的类也都继承于 Object 类。由于所有类都是 Object 类,所以在定义类时可省略 extends Object 关键字。在 Object 类中主要包括 clone()、finalize()、equals()、toString() 等方法,其中常用的两个方法为 equals() 和 toString() 方法。由于所有的类都是 Object 类的子类,所以任何类都可以重写 Object 类中的方法。除此之外,Object 类中的 getClass()、notify()、notifyAll()、wait() 等方法不能被重写,因为这些方法被定义为 final 类型。
1.getClass() 方法
getClass() 方法是 Object 类定义的方法,它会返回对象执行时的 Class 实例,然后使用此实例调用 getName() 方法可以取得类的名称。语法如下:
getClass().getName();
通常将 getClass() 方法与 toString() 方法联合使用。
2.toString() 方法
toString() 方法的功能是将一个对象返回为字符串形式,它会返回一个 String 实例。在实际的应用中通常重写 toString() 方法,为对象提供一个特定的输出模式。当这个类转换为字符串或与字符串连接时,将自动调用重写的 toString() 方法。
public class ObjectTest {
public String toString() {
return "在 " + getClass().getName() + " 类中重写 toString() 方法";
}
public static void main(String[] args) {
System.out.println(new ObjectTest());
}
}
在本实例中重写了父类 Object 类的 toString() 方法,在子类的 toString() 方法中使用 Object 类中的 getClass().getName() 方法获取当前运行的类名,定义一段输出字符串,当我们输出类对象时,将自动调用 toString() 方法。
3.equals() 方法
之前说过比较“==”运算符与 equals() 方法,两者的区别在于“==”运算符比较的是两个对象的引用是否相等,而 equals() 方法比较的是两个对象的实际内容。示例如下:
public class EqualsTest {
// 自定义类 EqualsTest
}
public class OverWriteEquals {
public static void main(String[] args) {
String s1 = "123";
String s2 = "123";
System.out.println(s1.equals(s2));
EqualsTest equalsTest1 = new EqualsTest();
EqualsTest equalsTest2 = new EqualsTest();
System.out.println(equalsTest1.equals(equalsTest2));
}
}
从运行结果可以看出,在自定义的类中使用 equals() 方法进行比较时,将返回 false,因为 equals() 方法默认实现是使用“==”运算符比较两个对象的引用地址,而不是比较对象的内容,所以要想真正做到比较两个对象的内容,需要在自定义类中重写 equals() 方法。