Я просто просмотрел интерфейс Set
и обнаружил, что он в основном (или полностью) только переопределяет функции, которые уже находятся в интерфейсе Collection
. Set
сам расширяет Collection
, значит, это не означает, что интерфейс Set
автоматически имеет все функции от Collection
? Итак, почему они были повторно описаны?
Например, Set
переопределяет это:
/**
* Returns the number of elements in this set (its cardinality). If this
* set contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
* <tt>Integer.MAX_VALUE</tt>.
*
* @return the number of elements in this set (its cardinality)
*/
int size();
/**
* Returns <tt>true</tt> if this set contains no elements.
*
* @return <tt>true</tt> if this set contains no elements
*/
boolean isEmpty();
И объявление в Collection
:
/**
* Returns the number of elements in this collection. If this collection
* contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
* <tt>Integer.MAX_VALUE</tt>.
*
* @return the number of elements in this collection
*/
int size();
/**
* Returns <tt>true</tt> if this collection contains no elements.
*
* @return <tt>true</tt> if this collection contains no elements
*/
boolean isEmpty();
Это кажется мне слишком избыточным. Почему бы просто не определить интерфейс Set
как:
public interface Set<E> extends Collection<E> {}
Я думаю, что нет никакой разницы между этими интерфейсами, верно?
Конечно, я не спрашиваю о различной семантике/значении Set
. Я знаю это. Я просто спрашиваю, имеет ли это технически (т.е. Компилятору) какую-либо разницу. I., говоря вообще:
interface A { void foo(); }
interface B extends A { void foo(); }
interface C extends A {}
Теперь, есть ли разница между A
, B
или C
?
В то время как контракт (то есть то, что сказано в документации) может действительно отличаться для некоторых функций (как для add
), есть веская причина для их повторного использования: чтобы иметь возможность разместить новую документацию, то есть определить новый контракт.
Однако существуют также функции (например, isEmpty
), которые имеют точно такую же документацию/контракт. Почему они также переоформлены?