在研究抽象类和接口时。我想知道为什么java集合有所有类抽象。为什么他们不实现接口而不是抽象类。我的AbstractList,AbstractSet的问题。为什么他们不让它们接口。
注意:: - 我需要设计预期答案
答案 0 :(得分:6)
我想知道为什么java集合具有所有类摘要。
这个假设是错误的,因为你在Collections框架中有Collection,List和Set等接口。
为什么他们不实现接口而不是抽象类。
如果你的意思是AbstractList,AbstractSet
.. iec,因为要提供接口无法实现的基本实现(在java8下面)
最后结合你的两点你可以看到
AbstractList implements Iterable<E>, Collection<E>, List<E> {}
答案 1 :(得分:2)
List
,Collection
,Map
和Set
都是接口。如果您正在讨论AbstractList
,AbstractCollection
,AbstractMap
或AbstractSet
中的任何一个,那么您需要做的就是查看Javadoc以了解它们的原因实现。
示例:http://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html
public abstract class AbstractSet<E>
extends AbstractCollection<E>
implements Set<E>
此类提供Set接口的骨干实现 最小化实现此接口所需的工作量。这个过程 通过扩展这个类实现一个集合与 通过扩展AbstractCollection来实现Collection,除了 此类的子类中的所有方法和构造函数都必须 遵守Set接口强加的附加约束(for 例如,add方法不允许添加多个 对象的实例)。
请注意,此类不会覆盖任何实现 AbstractCollection类。它只是增加了实现 equals和hashCode。
答案 2 :(得分:1)
大多数java集合都执行这两个操作,实现接口并扩展抽象类。
例如:
在您的代码中,您应该尽可能地将变量声明为接口。例如:
List<String> myList = new ArrayList<>();
答案 3 :(得分:1)
Collections框架包含List
,Map
,Set
等接口。
然后有抽象类实现接口和定义/实现方法,这些方法通常在所有具体实现中使用 。示例:AbstractList
,AbstractSet
,AbstractMap
。
然后您将其他功能添加到具体的集合类中,例如ArrayList
,HashMap
,HashSet
,这些类扩展了这些抽象类。