我可以使用抽象类(实现接口)来设计高级类图吗?



我可以在设计类图时使用抽象类(实现接口(吗?我的线索指出,如果有人直接使用界面怎么办?他建议设计应该坚持界面和类?这背后有什么原因吗?

当然你可以这样做。

一个突出的例子是AbstractList。

此抽象类提供列表接口的"基本"实现。这样就可以编写更具体的实现,例如 LinkedList 和 ArrayList,而无需复制大量通用代码。

请注意:在上述情况下,该抽象类的"核心"行为稍后将成为"List"实现。但是,也很有可能拥有"额外"实现某些接口的抽象类,仅仅是因为这样做是有意义的。

你没有特别问这个问题,但值得一提的是,Java8 在接口中引入了默认方法,Java9 在接口中添加了私有和静态方法。

这意味着:我给出的例子现在可以编写,而无需抽象基类。该抽象基类没有任何字段(又名:无内部状态(。它通过调用 List 接口的其他方法来完成所有工作。

因此:使用默认方法,您可以创建实现行为的复杂接口。通过允许静态/私有方法,您甚至可以解决"干净代码"的各个方面(例如将公共代码提取到私有帮助程序方法中以避免重复(。但如前所述:这仅适用于不需要字段来存储内部状态的情况。

但回到你最初的问题:答案是肯定的。请理解,抽象类仅仅因为默认方法而变得无关紧要。使用抽象基类可能还有其他很好的理由,而不是仅仅依赖"增强接口"。

相关内容

最新更新