Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Особенности класса 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.