Я только что посмотрел интерфейс 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
.Я знаю это.Я просто спрашиваю, есть ли какая-то техническая разница (то есть с компилятором).То есть, говоря в общем:
interface A { void foo(); }
interface B extends A { void foo(); }
interface C extends A {}
Теперь, есть ли разница между A
, B
или C
?
В то время как контракт (то есть то, что сказанов документации) может действительно отличаться для некоторых функций (например, для add
), есть веская причина для их повторного объявления: чтобы можно было поставить новую документацию, то есть определить новый контракт.
Однако есть также функции (например, isEmpty
), которые имеют точно такую же документацию / контракт.Почему они также повторно объявлены?