Java Object类的用法(新手必看)
大家最开始学习用 class 关键字定义类时,就应用到了继承原理,因为在 Java 中,所有的类都直接或间接继承了 java.lang.Object 类。
Object 类是比较特殊的类,它是所有类的父类,是 Java 类层中的最高层类。用户创建一个类时,除非已经指定它从其他类继承,否则它就是从 java.lang.Object 类继承而来的。
Java 中的每个类都源自 java.lang.Object 类,如 String 类、Integer 类等都是继承自 Object 类。除此之外,自定义的类也都继承自 Object 类。由于所有类都是 Object 类的子类,因此在定义类时可省略 extends Object,如下图所示。

图 1 定义类时可以省略 extends Object
语法如下:
【实例】让学生自我介绍。创建 Student 类,重写 toString() 方法,使该类的对象可以自定义输出自己的姓名和年龄。
【实例】根据身份证号判断是否为同一人。为 People 类创建身份证号和姓名两个属性,重写 equals() 方法,仅以身份证号作为区分条件。创建 n 个 People 对象,用 equals() 方法和“==”运算符来判断是否存在多个对象代表同一个人。
Object 类是比较特殊的类,它是所有类的父类,是 Java 类层中的最高层类。用户创建一个类时,除非已经指定它从其他类继承,否则它就是从 java.lang.Object 类继承而来的。
Java 中的每个类都源自 java.lang.Object 类,如 String 类、Integer 类等都是继承自 Object 类。除此之外,自定义的类也都继承自 Object 类。由于所有类都是 Object 类的子类,因此在定义类时可省略 extends Object,如下图所示。

图 1 定义类时可以省略 extends Object
Object类常用方法
在 Object 类中,主要包括 clone()、finalize()、equals()、toString() 等方法,其中常用的两个方法为 equals() 和 toString()。由于所有的类都是 Object 类的子类,因此任何类都可以重写 Object 类中的方法。下面详细讲述 Object 类中的几个重要方法:注意,Object 类中的 getClass()、notify()、notifyAll()、wait() 等方法不能被重写,因为这些方法被定义为 final 类型。
1) getClass()方法
getClass() 方法是 Object 类定义的方法,它会返回对象执行时的 Class 实例,然后使用此实例调用 getName() 方法可以取得类的名称。语法如下:
getClass().getname();可以将 getClass() 方法与 toString() 方法联合使用:
2) toString()方法
toString() 方法的功能是将一个对象返回为字符串形式,它会返回一个 String 实例。在实际的应用中通常重写 toString() 方法,为对象提供一个特定的输出模式。当这个类转换为字符串或与字符串连接时,将自动调用重写的 toString() 方法。【实例】让学生自我介绍。创建 Student 类,重写 toString() 方法,使该类的对象可以自定义输出自己的姓名和年龄。
public class Student { String name; int age; public Student(String name, int age) { this.name = name; this.age = age; } public String toString() { return "我叫" + name + ",今年" + age + "岁。"; } public static void main(String[] args) { Student s1 = new Student("张三", 16); System.out.println(s1); Student s2 = new Student("李四", 19); System.out.println(s2); } }运行结果如下:
我叫张三,今年16岁。
我叫李四,今年19岁。
3) equals()方法
在 Java 语言中,有两种比较对象的方式,分别为“==”运算符与 equals() 方法。二者的区别在于:- “==”比较的是两个对象引用内存地址是否相等;
- equals()方法比较的是两个对象的实际内容。
【实例】根据身份证号判断是否为同一人。为 People 类创建身份证号和姓名两个属性,重写 equals() 方法,仅以身份证号作为区分条件。创建 n 个 People 对象,用 equals() 方法和“==”运算符来判断是否存在多个对象代表同一个人。
public class People { int id; // 身份证号 String name; // 名字 public People(int id, String name) { this.id = id; this.name = name; } public boolean equals(Object obj) { // 重写 Object 类的 equals() 方法 if (this == obj) // 如果参数与本类是同一个对象 return true; if (obj == null) // 如果参数是 null return false; if (getClass() != obj.getClass()) // 如果参数与本类类型不同 return false; People other = (People) obj; // 将参数强转成本类对象 if (id != other.id) // 如果二者的身份证号不相等 return false; return true; } public String toString() { // 重写 Object 类的 toString() 方法 return name; // 只输出名字 } public static void main(String[] args) { People p1 = new People(220, "tom"); People p2 = new People(220, "汤姆"); People p3 = new People(330, "张三"); Object o = new Object(); System.out.println(p1 + "与" + p2 + "是否为同一人? "); System.out.println("equals()方法的结果:" + p1.equals(p2)); System.out.println("==运算符的结果:" + (p1 == p2)); System.out.println(); System.out.println(p1 + "与" + p3 + "是否为同一人? "); System.out.println(p1.equals(p3)); System.out.println(p1 + "与" + o + "是否为同一人? "); System.out.println(p1.equals(o)); } }运行结果如下:
tom与汤姆是否为同一人?
equals()方法的结果:true
==运算符的结果:false
tom与张三是否为同一人?false
tom与java.lang.Object@48cf768c是否为同一人?false