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