#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() , потому что поведение всегда будет одинаковым.