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

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

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

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

Благодарю.

2 ответа

Решение

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

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

Другие вопросы по тегам