类似之处:
· 抽象类和接口都包含可以有派生类继承的成员.
· 接口和抽象类都不能直接实例化, 但可以声明他们的变量.
· 可以使用多态性把继承于这两种类型的对象指定给他们的变量, 通过这些变量来使用这些类型的成员. 不能直接访问派生类对象的其他成员.
区别:
· 派生类只能继承一个基类, 即只能直接继承一个抽象类(但可以使用一个继承链包含多个抽象类). 相反, 类可以使用任意多个接口.
· 抽象类可以拥有抽象成员(没有代码体, 必须在派生类中实现, 否则派生类本身必须也是抽象的), 和非抽象成员(他们拥有代码体, 也可以是虚拟的, 这样就可以在派生类中重写).
· 接口成员必须都在使用接口的类上实现----他们没有代码体, 另外, 按照定义, 接口成员是公共的, 但抽象的成员可以是私有的(只要他们不是抽象的), 受保护的, 内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问).
· 接口不能包含字段, 构造函数, 析构函数, 静态成员或常量.
这说明这两种类型用于完全不同的目的.
抽象类主要用作对象系列的基类, 共享某些主要特性, 例如共同的目的和结构.
接口则主要用于类, 这些类在基础水平上有所不同, 但仍可以完成某些相同的任务.