Какие знаешь методы класса по умолчанию?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Методы класса по умолчанию в Java
В Java каждый класс по умолчанию наследует методы из класса Object — корневого класса иерархии наследования. Это фундаментальные методы, которые доступны для любого объекта в Java.
Основные методы Object
1. toString()
Возвращает строковое представление объекта. По умолчанию возвращает строку в формате ClassName@hashCode:
Object obj = new Object();
System.out.println(obj.toString()); // java.lang.Object@7ad041f
Обычно переопределяют для вывода осмысленной информации об объекте:
class Person {
String name;
int age;
@Override
public String toString() {
return "Person{" + "name='" + name + "'" +
", age=" + age + "}";
}
}
2. equals(Object obj)
Сравнивает содержимое двух объектов. По умолчанию использует сравнение по ссылке (==):
String str1 = new String("Java");
String str2 = new String("Java");
System.out.println(str1 == str2); // false (разные ссылки)
System.out.println(str1.equals(str2)); // true (одинаковое содержимое)
Часто переопределяют для логического сравнения:
class Book {
String isbn;
String title;
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Book book = (Book) obj;
return isbn.equals(book.isbn);
}
}
3. hashCode()
Возвращает хеш-код объекта — целое число, используемое в коллекциях (HashMap, HashSet). Важно переопределять вместе с equals():
@Override
public int hashCode() {
return isbn.hashCode();
}
Контракт hashCode():
- Если
a.equals(b), тоa.hashCode() == b.hashCode() - Если
a.hashCode() != b.hashCode(), то!a.equals(b)
4. getClass()
Возвращает объект Class, содержащий информацию о классе при runtime:
String str = "Hello";
Class<?> clazz = str.getClass();
System.out.println(clazz.getName()); // java.lang.String
5. clone()
Создаёт поверхностную копию объекта. Требует имплементации интерфейса Cloneable:
class Person implements Cloneable {
String name;
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
6. wait(), notify(), notifyAll()
Используются для синхронизации потоков. Позволяют потокам ждать определённых условий:
synchronized void waitForSignal() throws InterruptedException {
wait();
}
synchronized void sendSignal() {
notify();
notifyAll();
}
7. finalize()
Вызывается Garbage Collector перед удалением объекта. Используется редко (устарел с Java 9):
@Override
protected void finalize() throws Throwable {
System.out.println("Объект удаляется");
super.finalize();
}
Практический пример
class Employee {
private int id;
private String name;
@Override
public String toString() {
return String.format("Employee[id=%d, name='%s']", id, name);
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Employee)) return false;
Employee emp = (Employee) obj;
return this.id == emp.id;
}
@Override
public int hashCode() {
return Integer.hashCode(id);
}
}
Эти методы — фундамент работы с объектами в Java. Их переопределение — обычная практика для правильного поведения пользовательских классов в коллекциях и при логировании.