类似:
1.抽象类和接口都包含可以由派生类继承的成员
2.接口和抽象类都不能直接实例化,但可以声明它们的变量。如果这样做,就可以用多态性把继承这两种类型的对象指定给它们的变量。接着通过这些变量来使用这些类型的成员,但不能直接访问派生对象的其他成员
区别:
1.派生类只能继承一个基类,即只能直接继承一个抽象类
2.相反,类可以使用任意多个接口
3.抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本身必须也是抽象的)和非抽象成员(它们拥有代码体,也可以是虚拟的,这样就可以在派生类中重写)
4.接口成员必须都在使用接口的类上实现---它们没有代码体
5.接口成员是公共的(因为它们倾向于在外部使用),但抽象类的成员可以是私有的(只要它们不是抽象的),受保护的,内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)
6.接口不能包含字段,构造函数,析构函数,静态成员或常量
|