Почему аннотация не работает для неявных методов интерфейса?

#java #interface #abstract #jls

#java #интерфейс #аннотация #jls

Вопрос:

Читая спецификацию JLS для интерфейсов, я наткнулся на следующую фразу:

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

Итак, мой вопрос заключается в том, когда мы реализуем интерфейс, почему мы не вынуждены переопределять неявные методы, которые объявлены в Object классе, даже если они неявно определены как абстрактные в интерфейсе. Надеюсь, я правильно выразился.

Спасибо.

Ответ №1:

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

Комментарии:

1. Ах!! Пропустил это .. Кстати, спасибо ..:)

Ответ №2:

Цель интерфейса — заставить вас реализовать некоторый метод. Причина, по которой все расширяет Object, заключается в том, что мы хотим иметь какой-то способ работы со всеми классами независимо от реализации. Нет причин, по которым каждый класс должен реализовывать что-то вроде getClass() , потому что поведение всегда будет одинаковым.