什么是抽象类?编程
抽象类是特殊的类,只是不能被实例化;除此之外,具备类的其余特性;重要的是抽象类能够包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类能够派生自一个抽象类,能够覆盖基类的抽象方法也能够不覆盖,若是不覆盖,则其派生类必须覆盖它们。抽象类不能被密封。若是派生类没有实现全部的抽象方法,则该派生类也必须声明为抽象类。设计模式
什么是接口?函数
接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR容许接口能够包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。spa
例子:飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;可是F22属于飞机抽象类,鸽子属于鸟抽象类。设计
相同点: (1)都不能被直接实例化,均可以经过继承实现其抽象方法。继承
(2)都是面向抽象编程的技术基础,实现了诸多的设计模式。索引
不一样点:(1) 接口支持多继承;抽象类不能实现多继承。 接口只能定义抽象规则;接口
(2)抽象类既能够定义规则,还可能提供已实现的成员。 接口是一组行为规范;事件
(3)抽象类是一个不彻底的类,着重族的概念。 接口能够用于支持回调;class
(4)抽象类不能实现回调,由于继承不支持。 接口只包含方法、属性、索引器、事件的签名,
但 不能定义字段和包含实现的方法;
(5)抽象类能够定义字段、属性、包含有实现的方法。 接口能够做用于值类型和引用类型;
(6)抽象类只能做用于引用类型。例如,Struct就能够继承接口,而不能继承类。
(7)抽象类有构造方法,接口却没有构造方法。
接口的应用场合:
抽象类的应用场合:
一句话,在既须要统一的接口,又须要实例变量或缺省的方法的状况下,就可使用它。最多见的有: