#java #ооп #интерфейс
Зачем добавлять в каждом наследнике интерфейсе те же самые методы?
Вот к примеру в Java, List интерфейс наследуется от Collection но объявлены те же
самые методы что и в Collection, как будто я мог бы использовать интерфейс List исключая
наследование от Collection.
Ответы
Ответ 1
Зачем добавлять в каждом наследнике интерфейсе те же самые методы Если кратко, то для изменения javadoc методов. Если подробнее, то: Это не обязательно - все зависит от того, изменяется контракт метода или нет. Контракт определяется сигнатурой метода и документацией к нему. В случае с Collection и его дочерними интерфейсами List, Set и т.д. контракт методов определяется в интерфейсе каждой из коллекций. Например, по контракту метод boolean add(E e) для Set исключает дубликаты, а List - нет. Аналогичный вопрос на enSOОтвет 2
Я предполагаю, что это было сделано для улучшения документации: теперь у наследников Collection можно в документации указать дополнительные подробности над переопределенными методами. Рассмотрим на примере метода iterator(): public interface Collectionextends 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(); ... }
Комментариев нет:
Отправить комментарий