Класс Object
Если класс ни от чего не наследуется, то он по умолчанию отнаследован от класса Object
public class Empty {}
// на самом деле
public class Empty extends Object {
public Empty() {
super();
}
}
Методы Object
-
public String toString()- строковое представление объекта.- Реализация по умолчанию:
ИмяКласса@хэшкод - Переопределять для красивого вывода
- Record автоматически переопределяет
- Реализация по умолчанию:
-
public boolean equals(Object obj)- эквивалентность двух обхектов==- сравнивает ссылки- По умолчанию
equalsтоже сравнивает ссылки, так что лучше переопределить -
Правила, которые нельзя нарушать:
- Рефлексивность
- Симметричность
- Транзитивность
- Согласованность (при очередном вызове результат не должен поменяться)
- Сравнение с null:
x.equals(null) == null // ВСЕГДА false public int hashCode()- числовое значение для эффективной работы хэш-таблиц
-
Реализация по умолчанию: вычисление на основе адреса
- Используется в HashMap
- Между
equalsиhashCodeдолжен соблюдаться определенный контракт
-
public final native Class<?> getClass()- возвращает метаданные объекта во время выполнения- Основа для рефлексии
-
protected native Object clone() thows CloneNotSupportedException- создает и возвращает копию объекта- По умолчанию: shallow копия
- Условие использования: реализация
Cloneable - Не очень удачный метод в общем и целом
-
public final void wait(),public final native void notify(),public final native void notifyAll()- для работы с многопоточностью (подробнее здесь) protected void finalize() throws Thowable- метод вызывался GC перед удалением объекта, сейчас@Deprecated