学习接口和抽象类

接口和抽象类的使用是大家经常讨论的问题,什么时候使用接口,什么该用抽象类,两者经常交叉在一起,对它们进行彻底的分析是很有必要的。


接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值,接口方法不能包含任何实现。

抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类,在抽象方法声明中不能使用 static 或 virtual 修改符, 实现抽象方法由override方法来完成。  


相同点:

都不能被直接实例化,都可以通过继承实现其抽象方法。

 
不同点:

接口支持多继承,抽象类不能实现多继承

接口只能定义抽象规则,抽象类既可以定义规则,还可以提供已实现的成员。

使用规则与场合:

接口中不能定义字段,也不能有实现的方法,抽象类中可以定义字段,包括实现的方法;

尽量将接口设计成单一的功能,保持接口不变是设计时首要考虑的问题, 扩展时,应该增加新的接口,而不要更改现有接口,因为向接口中添加新成员,会导至修改所有的派生类,并重新编译;

如果预计会出现新功能需要扩展,设计时考虑使用抽象类,抽象类主要应用于关系密切的对象,而接口适合为不相关的类提供通用的方法。  

对于这个两概念的深入理解,还应该建立在不断实践的基础上,实践出真理。

原文地址:https://www.cnblogs.com/fredx/p/1622466.html