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