От какого класса наследуется метод hashCode(), если у класса нет явного наследования в Java?

«От какого класса наследуется метод hashCode(), если у класса нет явного наследования в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Если класс не объявлен с ключевым словом extends, он неявно наследует от класса java.lang.Object. Следовательно, метод hashCode() наследуется именно от Object.

Почему это важно:

  • Все классы в Java являются потомками Object.
  • Реализация Object.hashCode() по умолчанию обычно возвращает целое число, основанное на внутреннем адресе объекта, но это не гарантировано спецификацией JVM и зависит от реализации.

Пример и best practice:

class MyClass { // Неявно: extends Object
    private int id;
    private String name;

    // Наследует Object.hashCode()
}

public class Main {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        System.out.println(obj.hashCode()); // Вызывается Object.hashCode()
    }
}

Рекомендация: Для корректной работы с коллекциями, основанными на хэшах (HashMap, HashSet), и для соблюдения контракта между hashCode() и equals(), этот метод следует переопределять вместе с equals().