Что такое тип Object в Java и зачем он нужен
Что проверяют
Знаете ли вы устройство корня иерархии и контракты его методов. Вопрос выглядит школьным, но за ним почти всегда идут equals и hashCode, поведение объектов в коллекциях и стирание типов, поэтому отвечать стоит сразу с прицелом на продолжение.
Как отвечать
Object это корень иерархии классов. Класс без явного extends наследуется от него напрямую, массивы тоже объекты и тоже наследуются, а у интерфейсов суперкласса нет, хотя через переменную интерфейсного типа методы Object вызываются. Примитивы объектами не являются и попадают в Object только через обёртки, то есть с боксингом.
Что он даёт каждому объекту: equals, hashCode, toString, getClass, clone, а также wait, notify и notifyAll, потому что монитор есть у любого объекта. Метод finalize объявлен устаревшим, освобождение ресурсов делают через try-with-resources.
Реализации по умолчанию стоит назвать явно: equals сравнивает ссылки, hashCode связан с идентичностью объекта, toString отдаёт имя класса и хеш в шестнадцатеричном виде.
Object a = new String("abc");
Object b = new String("abc");
a == b; // false: два разных объекта
a.equals(b); // true, но это equals из String, а не из ObjectКонтракт помните дословно: равные по equals объекты обязаны иметь одинаковый hashCode, обратное неверно. И добавьте про дженерики: типы стираются, внутри коллекции всё равно лежит Object, отсюда предупреждения об unchecked-приведении и невозможность создать массив параметризованного типа.
Где спотыкаются
Утверждают, что equals из Object сравнивает содержимое. Он сравнивает ссылки, и равенство строк в примере выше даёт переопределённый метод String. Для своего класса без переопределения два объекта с одинаковыми полями не равны.
Переопределяют equals и забывают hashCode. Объект кладётся в HashSet, ищется и не находится, потому что поиск идёт по корзине, вычисленной от старого хеша.
Считают, что раз внутри всё равно Object, приведение типов безопасно. Компилятор промолчит, а несоответствие вылезет исключением приведения типа уже в работающем приложении.