首页 > 代码库 > 关于接口与抽象类

关于接口与抽象类

接口与抽象类的区别总结一下,主要是摘自王涛的《你必须知道.Net》一书,在此感谢王涛老师。

1 相同点

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

2)都是面向抽象编程的技术基础,实现了诸多的设计模式。

不同点:

1)接口支持多继承,抽象类不能实现多继承。严格意义上说,接口继承类应该称为类实现接口;

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

3)接口是一组行为规范;抽象类是一个不完全的类,着重族的概念;

4)接口用于支持回调;因为继承不支持,所以抽象类在实现回调时有局限性。

 

接口可用作值类型与引用类型;抽象类只能用作引用类型。

接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性和包含的方法。

 

3 规则与场合

1)面向对象思想最重要的一个原则:面向接口编程;

2) 借助接口和抽象类,23个设计模式实现。简单的说,面向抽象编程,通过封装变化实现实体之间的关系;

3)抽象类主要用于关系密切的对象,而接口最适合为相关的类提供通用功能;

4) 接口着重于CAN-DO关系类型,而抽象类偏重于IS-A式的关系;

5) 接口多定义对象的行为;抽象类多定义对象的属性;

6) “接口不变”,是应该考虑的重要因素;

7) 在接口中,所有的方法默认为public;

8) 在抽象方法声明中,不能使用static或virtual修饰符。

 

关于接口与抽象类