```markdown
在Java编程语言中,所有类的根类是 Object
类。无论一个类是直接继承自 Object
还是间接继承自其他类,最终都会继承自 Object
类。Object
类是Java类层次结构的基类,它提供了一些通用的方法,这些方法可以被所有类继承和重写。
Object
类的作用Object
类的主要作用是为所有Java类提供一个共同的基类,它包含了一些核心方法,这些方法可以被所有继承自它的类所调用和覆盖。Object
类的常用方法有:
toString()
:返回当前对象的字符串表示。equals(Object obj)
:比较两个对象是否相等。hashCode()
:返回对象的哈希码,用于集合框架中的对象存储。clone()
:创建并返回当前对象的副本(需要实现 Cloneable
接口)。getClass()
:返回当前对象的类类型。notify()
、notifyAll()
和 wait()
:用于线程同步的控制。Object
类的特点因为所有类都继承自 Object
类,这意味着每个Java类都可以使用 Object
类中的方法。例如,如果一个类没有显式重写 toString()
方法,那么它将使用 Object
类中默认的实现,通常会返回该对象的类名和它的内存地址的字符串表示。
toString()
方法默认情况下,Object
类的 toString()
方法返回一个字符串,包含该对象的类名和它的哈希码。比如:
java
MyClass obj = new MyClass();
System.out.println(obj.toString());
输出类似:
MyClass@15db9742
通常,我们会覆盖 toString()
方法,以便提供更具可读性的字符串描述。
equals()
和 hashCode()
方法equals()
方法用于比较两个对象的“逻辑”相等性,而 hashCode()
方法用于生成一个对象的哈希码。在实际应用中,尤其是在集合类(如 HashMap
、HashSet
)中,这两个方法起着至关重要的作用。
默认情况下,equals()
方法会比较对象的内存地址,而不是对象的内容。因此,通常会覆盖 equals()
方法,以根据对象的属性内容来判断它们是否相等。
Object
类的示例假设我们有一个自定义类 Person
,它继承了 Object
类:
```java public class Person { private String name; private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
} ```
在这个示例中,Person
类显式地覆盖了 toString()
、equals()
和 hashCode()
方法,以便提供自定义的行为。
在Java中,所有类的根类是 Object
类。它提供了一些常用的方法,这些方法对于所有Java类都是可用的。虽然我们可以根据需要覆盖这些方法,但它们仍然是所有Java类的基础。通过继承 Object
类,Java实现了一个统一的类层次结构,这使得对象的管理和比较变得更加规范和一致。
```