Ответ 1
Затем, откуда приходит метод equals, интерфейс также расширяет класс класса Object?, если это правда, как интерфейс может расширять класс?
Спецификация языка Java имеет дело с этим явно.
Из раздела 9.2:
Если интерфейс не имеет прямых суперинтерфейсов, тогда интерфейс неявно объявляет открытый метод абстрактных членов m с сигнатурой s, возвращаемым типом r и предложением th, соответствующим каждому методу публичного экземпляра m с сигнатурой s, типом возврата r и throws, объявленный в Object, если только метод с одной и той же сигнатурой, таким же типом возвращаемого значения и предложение совместимого броска явно объявлено интерфейсом.
В основном, это так, что вы можете использовать equals
, hashCode
и т.д., потому что способ указания языка Java означает, что любая конкретная реализация интерфейса будет классом, и этот класс должен в конечном итоге быть подкласс Object
, поэтому члены обязательно будут присутствовать.
Другими словами, хотя сам интерфейс не расширяет Object
, известно, что любая реализация будет.
Здесь класс A не нуждается в реализации метода toString(), поскольку он присутствует в классе Object. Тогда какова цель определения этого метода в интерфейсе коллекции, поскольку они не могут заставить этот класс реализации реализовать этот метод.
Обычно это делается для ясности, например. для документирования того, что ожидается от реализации в терминах членов, объявленных в Object
.