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

Что переходит от Object по наследованию

1.2 Junior🔥 111 комментариев
#ООП#Основы Java

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

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

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

Наследование от Object: Методы и поведение

Что такое java.lang.Object?

Object - это базовый класс всех классов в Java. Каждый класс автоматически наследуется от Object, даже если ты не указываешь явно.

// Эти две записи эквивалентны
public class MyClass {}  // неявно extends Object
public class MyClass extends Object {}  // явно

// Все классы наследуют методы Object
MyClass obj = new MyClass();
obj.toString();  // Из Object
obj.equals(obj);  // Из Object
obj.hashCode();  // Из Object

Методы, наследуемые от Object

1. toString()

Описание: возвращает строковое представление объекта.

По умолчанию: ClassName@hashCode

public class User {
    private String name;
    private int age;
    
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + "'" +
                ", age=" + age +
                "}";
    }
}

2. equals(Object obj)

Описание: проверяет, равны ли два объекта.

По умолчанию: сравнивает ссылки (как ==).

public class Product {
    private Long id;
    private String name;
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Product product = (Product) obj;
        return Objects.equals(this.id, product.id);
    }
}

3. hashCode()

Описание: возвращает хеш-код объекта.

ВАЖНО: Переопределяй ВСЕГДА, когда переопределяешь equals().

public class Account {
    private String accountNumber;
    
    @Override
    public int hashCode() {
        return Objects.hash(accountNumber);
    }
}

Contract: Если два объекта equal, их hashCode должны быть одинаковы.

4. clone()

Описание: создаёт копию объекта.

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

5. getClass()

Описание: возвращает объект Class этого объекта.

User user = new User("Alice", 25);
Class<?> clazz = user.getClass();
System.out.println(clazz.getSimpleName());  // User

6. wait(), notify(), notifyAll()

Описание: методы для синхронизации потоков.

synchronized (lock) {
    lock.wait();  // Ждёт
    lock.notifyAll();  // Пробуждает ждущие потоки
}

7. finalize() (DEPRECATED)

Статус: DEPRECATED с Java 9. НЕ ИСПОЛЬЗУЙ!

Используй try-with-resources с AutoCloseable вместо этого.

Сравнительная таблица

МетодОбычно переопределяетсяНазначение
toString()ДаСтроковое представление
equals()Да (если нужно)Сравнение объектов
hashCode()Да (с equals)Коллекции HashMap/HashSet
clone()РедкоКопирование объектов
getClass()НетРефлексия
wait/notifyНетСинхронизация потоков
finalize()Нет (deprecated)Не использовать

Best Practices

Делай так:

public class Proper {
    private String id;
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Proper other = (Proper) obj;
        return Objects.equals(this.id, other.id);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
    
    @Override
    public String toString() {
        return "Proper{id=" + id + "}";
    }
}

Не делай так:

  • Переопределяй equals без hashCode
  • Забывай null check в toString
  • Используй finalize()
  • Забывай о контракте equals-hashCode

Заключение

Все классы наследуют методы Object. Три самых важных:

  1. equals() - для семантического сравнения
  2. hashCode() - для работы с коллекциями
  3. toString() - для отладки

Всегда переопределяй equals() и hashCode() вместе!