为什么有些Collections扩展Abstract还实现了接口?

时间:2013-05-19 13:22:50

标签: java design-patterns

我很好奇为什么有些集合类扩展了抽象类,同时在那里实现了相应的集合接口,如List,Set等。?为什么不只是扩展抽象类。我可以理解实现其他接口来添加Cloneble,Serializable等功能。但是扩展抽象类并实现已经实现抽象类的接口。我认为我缺少一些设计原则。请有人详细说明这个设计理由吗?

2 个答案:

答案 0 :(得分:3)

存在集合接口,以便人们可以在不知道任何关于它实际是什么类型的集合的情况下使用集合 - 即使它没有扩展任何抽象类。
例如,大多数并发集合不扩展抽象基类。

存在抽象类以为大多数实现提供通用的基本功能。

答案 1 :(得分:0)

Collection接口定义合同,AbstractCollection包含"骨架实现"的功能。

要了解有关它的更多信息,我建议您理解"design by contract"和骨架实现,最好在Joshua Bloch的Effective Java - episode 18中进行描述。