Java:设置接口和集合接口的区别
我刚刚查找了界面,发现它大部分(或完全)只重新声明界面中已经存在的功能。 本身扩展,所以这是否意味着接口自动具有来自 的所有功能?那么,他们为什么要重新宣布呢?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