← Назад к вопросам

Какие знаешь особенности Object?

1.7 Middle🔥 161 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Особенности класса Object

Object — это суперкласс всех классов в Java. Каждый класс неявно наследует Object, что делает его фундаментом иерархии типов в Java. Это основной механизм полиморфизма и переиспользования кода.

Ключевые методы Object

equals(Object obj) — проверяет семантическое равенство объектов. По умолчанию работает как ==, сравнивая ссылки, но его нужно переопределять для корректного сравнения содержимого:

public class Person {
    private String name;
    private int 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 && Objects.equals(name, person.name);
    }
}

hashCode() — возвращает целое число, определяющее позицию объекта в хеш-таблице. Обязателен при переопределении equals для корректной работы в HashSet, HashMap и других коллекциях:

@Override
public int hashCode() {
    return Objects.hash(name, age);
}

toString() — возвращает строковое представление объекта. По умолчанию выводит формат вида ClassName@hexcode, но его нужно переопределять для отладки:

@Override
public String toString() {
    return "Person{" +
            "name='" + name + "'" +
            ", age=" + age +
            '}';
}

clone() — создает копию объекта. Требует имплементации интерфейса Cloneable и может выбросить CloneNotSupportedException. Создает поверхностную копию (shallow copy) полей:

public class Person implements Cloneable {
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

Методы синхронизации

wait(), notify(), notifyAll() — используются для координации потоков внутри synchronized блоков. Позволяют одному потоку ждать сигнала от другого:

synchronized (obj) {
    while (!condition) {
        obj.wait();
    }
    obj.notifyAll();
}

Методы получения метаинформации

getClass() — возвращает объект Class, содержащий метаинформацию о типе:

Object obj = new String("hello");
Class<?> clazz = obj.getClass();
String className = clazz.getName();

Важные особенности

  • Контракт equals/hashCode: если два объекта равны по equals, они должны иметь одинаковый hashCode
  • equals рефлексивен: obj.equals(obj) должна быть true
  • equals симметричен: если a.equals(b), то b.equals(a)
  • equals транзитивен: если a.equals(b) и b.equals(c), то a.equals(c)

Полное понимание Object критично для разработки качественного кода на Java.