为什么Java中的许多集合类扩展了抽象类并实现了接口?

2022-08-31 19:55:54

为什么Java中的许多集合类扩展了抽象类并实现了接口(该接口也由给定的抽象类实现)?

例如,类扩展并同时实现 ,但已经实现了 。HashSetAbstractSetSetAbstractSetSet


答案 1

这是一种记住这个类真正实现该接口的方法。
它不会产生任何不良影响,并且可以帮助理解代码,而无需经历给定类的完整层次结构。


答案 2

从类型系统的角度来看,如果类不再次实现接口,则不会有任何不同,因为抽象基类已经实现了它们。

这是千真万确的。

无论如何,他们实现它的原因是(可能)主要是文档:a is-a 。这可以通过添加到末尾来明确,尽管这不是绝对必要的。HashSetSetimplements Set

请注意,使用反射实际上可以观察到差异,但是如果不直接实现,我很难生成一些会中断的代码。HashSetSet