37 lines
2.6 KiB
Markdown
37 lines
2.6 KiB
Markdown
Если класс ни от чего не наследуется, то он по умолчанию отнаследован от класса `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` |