Интерфейс компаратора наследует класс Object? - PullRequest
0 голосов
/ 05 июля 2011

Я думаю, что это возможно, потому что интерфейс Comparator содержит метод equals.

Ответы [ 8 ]

8 голосов
/ 05 июля 2011

С раздел 9.2 спецификации языка Java :

Если интерфейс не имеет прямых суперинтерфейсов, то интерфейс неявно объявляет открытый метод абстрактного члена m с сигнатурой s, типом возврата r и выбрасывает предложение t, соответствующее каждому методу открытого экземпляра m с сигнатурой s, типом возврата r и Предложение throws t объявлено в Object, если только интерфейс явно не объявил метод с такой же сигнатурой, одинаковым типом возврата и совместимым предложением throws. Это ошибка времени компиляции, если интерфейс явно объявляет такой метод m в случае, когда m объявлено как окончательное в Object.

Это позволяет вам вызывать любой из Object методов через ссылку на тип интерфейса - что имеет смысл, учитывая, что реализация , безусловно, будет подклассом Object.

РЕДАКТИРОВАТЬ: В случае Comparator, так получается, что equals явно переименовано повторно объявлено, чтобы предоставить больше документации. Однако вы все равно сможете позвонить equals по ссылке Comparator.

2 голосов
/ 05 июля 2011

Нет интерфейса реализует класс объекта, но реализация делает

1 голос
/ 05 июля 2011

Типы интерфейса официально не являются подтипами Object, но ведут себя так, как если бы они были:

  • Они также неявно объявляют все методы Object (как указано Джоном)
  • Ониможет быть преобразован в объект путем расширенного преобразования без явного преобразования
  • Все объекты типа интерфейса автоматически становятся объектами типа объекта

В этом случае тип интерфейса повторно объявляетМетод equals совместимым образом, и реализация из Object используется, если реализующий класс не предоставляет свою собственную реализацию.

Спецификация здесь сделана таким образом, что реализация по умолчанию из Object.equals также соответствуетспецификация Comparator.equals, и что каждая (соответствующая) реализация Comparator.equals также соответствует спецификации Object.equals.

1 голос
/ 05 июля 2011

В Java каждый класс в конечном итоге будет расширяться Object.Хотя вы не можете создать экземпляр Comparator, все реализации компаратора будут расширяться Object.

. Метод equals() объявлен заново в Comparator, чтобы адаптировать Javadoc для специального контракта, который Comparator накладывает на equals()

1 голос
/ 05 июля 2011

См. Ссылку ниже

http://www.docjar.com/html/api/java/util/Comparator.java.html

В коде видно, что интерфейс Comparator имеет свой собственный метод equals.

1 голос
/ 05 июля 2011

Нет интерфейсов когда-либо расширяет / наследует Object.Только реализованные классы расширяют Object неявно (если не расширены явно).

Метод Comparator.equals() следует той же сигнатуре, что и метод Object.equals().Причина этого указана в JavaDoc:

Однако переопределение этого метода может в некоторых случаях повысить производительность, позволяя программам определять, что два разных компаратора накладывают один и тот же порядок.

0 голосов
/ 05 июля 2011

Интерфейсы подобны ролям и , их обязанности объявлены как методы интерфейса .

Компаратор, являющийся интерфейсом, просто перечисляет все обязанности, которые должны быть предоставлены классом, который реализует этот интерфейс.

Объект класса, который реализует Comparator, будет подклассом класса Object.

0 голосов
/ 05 июля 2011

В Java интерфейс никогда не может быть создан путем наследования его от класса.Так что нет, интерфейс Comparator не наследует класс Object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...