在下列情况下,抽象类是否优于接口?

时间:2011-03-30 20:35:36

标签: vb.net oop

我有一个包含四个功能的界面。我有大约20个实现此接口的类。在每个类中,我看到了很多重复的代码,例如,在每个类的开头都声明了常量。接口的方法实现(逻辑)大多是相同的。它包含重复的结构。这是通过实现抽象类而不是接口来消除大量重复类的情况。我正在努力的是也能够将抽象类中的常用方法作为非抽象方法,然后需要自己实现的方法将被标记为过度删除。我可以在抽象类中放置consts和结构吗?如果是这样,那将消除跨类的大量重复代码。在类中还有什么我应该注意的,作为一个标志,我可能应该使用抽象类而不是接口。

2 个答案:

答案 0 :(得分:2)

实际上,在大多数情况下,两者都有意义。创建一个接口并编写所有客户端代码以与该接口通信,但也创建一个实现该接口的抽象类。 SUbclasses可以扩展抽象类,如果他们想要或不想。这样你就可以获得界面的灵活性和抽象类的便利性。

答案 1 :(得分:1)

消除重复的代码总是一个好主意。所以,是的,您应该将常见的consts放入一个抽象类(它仍然可以并且应该实现接口)。但是,您应该考虑常量是否真的适用于所有派生类。

一个人永远不应该把一个常量放到抽象类中,因为一些的继承者需要它。这将是继承树中可能需要另一个抽象类的信号。