为什么AbstractList,AbstractSet使抽象不是接口

时间:2014-09-16 08:22:21

标签: java interface abstract-class

在研究抽象类和接口时。我想知道为什么java集合有所有类抽象。为什么他们不实现接口而不是抽象类。我的AbstractList,AbstractSet的问题。为什么他们不让它们接口。

注意:: - 我需要设计预期答案

4 个答案:

答案 0 :(得分:6)

  

我想知道为什么java集合具有所有类摘要。

这个假设是错误的,因为你在Collections框架中有Collection,List和Set等接口。

  

为什么他们不实现接口而不是抽象类。

如果你的意思是AbstractList,AbstractSet .. iec,因为要提供接口无法实现的基本实现(在java8下面)

最后结合你的两点你可以看到

AbstractList implements Iterable<E>, Collection<E>, List<E> {} 

答案 1 :(得分:2)

ListCollectionMapSet都是接口。如果您正在讨论AbstractListAbstractCollectionAbstractMapAbstractSet中的任何一个,那么您需要做的就是查看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集合都执行这两个操作,实现接口并扩展抽象类。

例如:

  • HashMap和TreeMap扩展了实现Map
  • 的AbstractMap
  • ArrayList和LinkedList扩展了实现List
  • 的AbstractList
  • HashSet和TreeSet扩展了实现Set
  • 的AbstractSet

在您的代码中,您应该尽可能地将变量声明为接口。例如:

List<String> myList = new ArrayList<>();

答案 3 :(得分:1)

Collections框架包含ListMapSet等接口。

然后有抽象类实现接口和定义/实现方法,这些方法通常在所有具体实现中使用 。示例:AbstractListAbstractSetAbstractMap

然后您将其他功能添加到具体的集合类中,例如ArrayListHashMapHashSet,这些类扩展了这些抽象类。