接口和抽象类看着这么相似,又那么不同:
- 接口和抽象类都不能直接使用,只能被继承或实现.
- 一个新的类只能继承自一个抽象类(对于现在绝大部分的语言是这样的),但可以实现多个接口
个人感觉,对于接口来说,更加偏向一种约定,只要实现这种约定的对象我们就可以就可以按这个约定来调用;而抽象类相比之下缺少灵活的感觉.
举一个CRM的例子,财务要备案并汇总各地返回来的表报,假设各地由于种种原因都没有统一自己的工具:A地给的是excel表格,B地给的是Access库,C地给的是lotus的电子表格。这时候用个抽象类就可以搞定了(以类C方式实现)
class DataReader{
public loadFromFile(string fileName);
public ReadRow();
public Pre();
public Next();
public First();
public Last();
}
从这个去继承出来ExcelDataReader,AccessDataReader, LotusDataReader,来实现数据的读取和导入。可是这时候D地的自动化程度比较高,提供了WebServices的读数据接口。很显然上面的这种方式不在适用了。这时候如果用接口的话,就方便多了:
interface IDataReader{
public Open(string fileName);
public ReadRow();
public Pre();
public Next();
public First();
public Last();
}
到时候不同的实现方式实现这个接口就可以被统一调用了。
以接口的方式来实现还有一个好处就是一个对象可以实现多个接口,用人来举这个例子最好了:一个人有社会性又有他的动物性,这就是说人同时继承了两个接口:社会接口和动物接口。当从社会方面来调用的时候,就可以让这个人去工作,结婚,遵守一些道德;从动物方面来调用的时候,就可以让这个人吃喝拉撒。