【发布时间】:2013-05-19 13:22:50
【问题描述】:
我很好奇为什么有些集合类扩展了抽象类,同时实现了相应的接口,比如List、Set等集合接口?为什么不只扩展抽象类。我可以理解实现其他接口以添加 Cloneble、Serializable 等功能。但扩展抽象类并实现已经抽象类实现的接口。我认为我缺少一些设计原则。请问有人可以详细说明这个设计原因吗?
【问题讨论】:
标签: java design-patterns
我很好奇为什么有些集合类扩展了抽象类,同时实现了相应的接口,比如List、Set等集合接口?为什么不只扩展抽象类。我可以理解实现其他接口以添加 Cloneble、Serializable 等功能。但扩展抽象类并实现已经抽象类实现的接口。我认为我缺少一些设计原则。请问有人可以详细说明这个设计原因吗?
【问题讨论】:
标签: java design-patterns
集合接口的存在使得人们可以在不知道集合实际上是什么类型的情况下任何使用集合——即使它没有扩展任何抽象类。
例如,大多数并发集合不扩展抽象基类。
抽象类的存在是为了为大多数实现提供通用的基本功能。
【讨论】:
interface Vehicle { move(); reverse(); changeGear(); } abstract AbstractVehicle{ move(){ // deafult implementaion of move } } class car extends AbstractVehicle implements Vehicle{ } 下面的示例为例,除非有某种原因,否则这样做似乎很尴尬。我想知道这个原因..
Collection 接口定义了合约,AbstractCollection 包含功能的“骨架实现”。
要了解更多信息,我建议您了解 "design by contract" 和骨架实现,最好在 Joshua Bloch 的 Effective Java - episode 18 中进行描述。
【讨论】: