1.定义
就是抽象类的运用,将相似类中不变的内容和方法放入到父类中,进行重用。
2.例子
2.1 代码
public abstract class AbstractImportData { public DataSet GetDsByExcel(string filePath) { return null; } public abstract bool UpdateDatabase(); } public class SimpleImportData : AbstractImportData { public override bool UpdateDatabase() { // 简单的更新一张表,只需要excel中的表头和table中字段的对应关系即可 return true; } } public class SqlImportData : AbstractImportData { public override bool UpdateDatabase() { // 可能需要更新多张表,这时必须自己手写sql更新逻辑 return true; } }
这里的代码,其实是一个excel导入的功能,但是因为有些excel导入只是更新一张表,有些是要关联更新几张表,逻辑肯定不一样。
但是共同的部分是,都需要将excel文件中的内容转换成database,然后在进行下一步的操作。
2.2 接口和抽象类
抽象类和接口的区别是,接口中的方法一个都不能实现,但是抽象类不一样,抽象类内部可以存在实现过的方法,为子类提供重用。
因此抽象类的核心,还是要将子类的公共操作进行提取,否则个人感觉就没有必要使用。
(当然,其实抽象类也有和接口一样,可以为框架提供公共调用的功能,但是个人感觉代码的重用才是抽象类有别于接口的地方。
学习到现在,如果是真正的面向对象思想,其实还是应该从语义上去区分接口和抽象类,这里不再详述,之后再写随笔和大家讨论。)
3.特点:
优点:使用继承的方式,可以达到代码的重用,避免了重复代码的产生。
缺点:其实继承的方式耦合还是比较高的,因此有些人会建议使用聚合的方式来代替继承,因为耦合会比较低