叶公之家

导航

抽象类

抽象类不能被实例化,但是并不意味着不可以有实现、不可以封装成员。

接口必须在派生类中实现。

接口和抽象类的相似之处。抽象类和接口都包含可以由派生类继承的成员。接口和抽象类都不能直接实例化,但可以声明它们的变量。如果这样做,就可以使用多态性把继承这两种类型的对象指定给他们的变量。接着通过这些变量来使用这些类型的成员,但不能直接访问派生对象的其他成员。

    下面看看它们的区别。派生类只能继承一个基类,即只能直接继承一个抽象类(但可以用一个继承链包含多个抽象类)。相反,类可以使用任意多个接口。但这不会产生太大的区别----这两种情况得到的效果是类似的。只是采用接口的方式略有不同。

    抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本身必须也是抽象的)和非抽象成员(它们拥有代码体,也可以是虚拟的,这样就可以在派生类中重写)。另一方面,接口成员必须都在使用接口的类上实现----它们没有代码体。另外,按照定义,接口成员是公共的(因为它们倾向于在外部使用),但抽象类的成员可以是私有的(只要它们不是抽象的)、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。此外,接口不能包含字段、构造函数、析构函数、静态成员或常量。

    注意:

   这说明这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所洞,但仍可以完成某些相同的任务。

posted on 2011-10-20 20:43  oldsnow  阅读(112)  评论(0编辑  收藏  举报