何时使用没有接口的抽象类?

时间:2010-02-16 14:24:15

标签: interface abstract-class

每当我创建一个抽象类时,我倾向于创建一个与其一起使用的接口,并让其他代码引用接口而不是抽象类。通常当我没有创建一个接口来开始我后悔它(例如必须覆盖所有被扼杀的方法来存储类以进行单元测试,或者稍后在线下新的类不需要任何修改并覆盖所有内容发现自己无法扩展任何其他类。)

首先,我尝试通过考虑is-a vs able-to来区分何时使用接口以及何时使用抽象类,但是我仍然会因为没有开始使用接口而最终遭受损失。

所以问题是什么时候只有抽象类而没有接口才是个好主意?

2 个答案:

答案 0 :(得分:2)

当您希望为派生类“赋予”某些基类功能时,但是当此功能不足以实例化可用类时,则转到抽象类。

如果您希望某些类完全实现一组方法(公共合同),那么使用接口定义此类合同并通过使它们继承此接口来强制执行它们是很方便的。

简而言之:

使用抽象类,您可以为派生类提供一些常用的基本功能。除非抽象类有一些存根(必须在那里实现),否则不需要进一步的操作。

使用接口,您需要派生类来实现一组函数,并且不传递任何实现。

  

所以问题是什么时候只有抽象类而没有接口才是个好主意?

  • 如果您不希望强制执行任何公共合同(由接口定义的一组方法/属性)。

  • 此外,当您不打算使用某些编码技术(如将对象转换为接口类型(运行时多态)或限制允许的输入时(某些方法参数将只接受实现某些接口的类型的对象)。

答案 1 :(得分:0)

嗯,主要情况是只有一个没有任何接口的抽象类是有用的,标记某种类型。能够检查对象是否是“某个”的东西是有用的。这些界面将某个对象“标记”为某种类型。根据您使用的语言,适用不同的设计模式......

这些抽象类存在于java中。您也可以在带有RTTI的C ++中使用它们。

my2c