我试图理解如何在UML中使用接口的实现和抽象类的实现。我在https://stackoverflow.com/a/13438187/700543发现了帖子,其中海报声明纯虚方法是接口,而那些纯虚方法是抽象类。有人能够给我一个真实世界的场景,而不是基于代码吗?
答案 0 :(得分:1)
接口只是库用户扩展的“类框架”,正如您所说,方法无法实现。 Abstract类可以实现方法。我会给你一个真实的例子:
想象一下,我为人们提供了一个实现排序功能的界面,我还提供了一个用于基准标记排序功能的类。我的工作台标记类只需要知道它需要调用哪些接口方法才能执行基准测试,它不知道它们是如何实现的。因此,在工作台标记类中,您可能只看到sortInterfaceInstace.getNumberOfSwap()
之类的内容,而sortInterfaceInstance
在编译时只知道sortInterface
类型,而不是任何特定的用户排序实现。
如果需要实现方法,请使用抽象而不是接口。
答案 1 :(得分:0)
接口只描述了如何使用某些东西,它没有提供它如何完成的底层实现,即只有纯虚函数的类。界面的英文比喻可能是形容词。
接口的一个示例是Movable接口。该接口可以提供一个纯虚函数移动,该移动告诉对象移动到给定位置。但是,它的移动方式尚未实施。
另一方面,抽象类与接口的不同之处在于它提供了一些实现细节,但不是全部。这些是概念上的高级项目,可以通过某些方式进行操作,但是当你开始使用它时,高级项目本身并不存在或有意义。
例如,假设我们有一个抽象的Shape类。形状可以具有某种原点,可以跟踪它的形状而不依赖于它。可以在Shape类中声明和实现转换形状的函数,从而避免了必须在每个子类中提供相同实现的麻烦。但是,当你试图获得形状的区域或周长时,如果不了解更多关于形状的信息,很难回答这个问题。