Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Зачем добавлять в каждом наследнике интерфейсе те же самые методы

#java #ооп #интерфейс


Зачем добавлять в каждом наследнике интерфейсе те же самые методы?
Вот к примеру в Java, List интерфейс наследуется от Collection но объявлены те же
самые методы что и в Collection, как будто я мог бы использовать интерфейс List исключая
наследование от Collection.
    


Ответы

Ответ 1



Зачем добавлять в каждом наследнике интерфейсе те же самые методы Если кратко, то для изменения javadoc методов. Если подробнее, то: Это не обязательно - все зависит от того, изменяется контракт метода или нет. Контракт определяется сигнатурой метода и документацией к нему. В случае с Collection и его дочерними интерфейсами List, Set и т.д. контракт методов определяется в интерфейсе каждой из коллекций. Например, по контракту метод boolean add(E e) для Set исключает дубликаты, а List - нет. Аналогичный вопрос на enSO

Ответ 2



Я предполагаю, что это было сделано для улучшения документации: теперь у наследников Collection можно в документации указать дополнительные подробности над переопределенными методами. Рассмотрим на примере метода iterator(): public interface Collection extends Iterable { ... /** * Returns an iterator over the elements in this collection. There are no * guarantees concerning the order in which the elements are returned * (unless this collection is an instance of some class that provides a * guarantee). * * @return an Iterator over the elements in this collection */ Iterator iterator(); ... } public interface List extends Collection { ... /** * Returns an iterator over the elements in this list in proper sequence. * * @return an iterator over the elements in this list in proper sequence */ Iterator iterator(); ... } public interface Set extends Collection { ... /** * Returns an iterator over the elements in this set. The elements are * returned in no particular order (unless this set is an instance of some * class that provides a guarantee). * * @return an iterator over the elements in this set */ Iterator iterator(); ... }

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

Отправить комментарий