抽象类和接口异同点

 

《大话设计模式》P.357

 

从表象来说:

1、抽象类可以给出一些成员(非抽象成员)的实现,接口却不包含成员的实现(没有方法体);

2、抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现;

3、一个类只能继承一个抽象类,但可以实现多个接口。

 

区分抽象类和接口的三点:

1、类是对对象的抽象;抽象类是对的抽象;接口是对行为的抽象。

2、如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类。

3、从设计角度讲,抽象类是从子类中发现了公共的东西,泛化初父类,然后子类继承父类;而接口是根本不知子类的存在,方法实现还不确认,预先定义。

 

抽象类是自底而上抽象出来的,而接口则是自顶向下设计出来的。

 

C# 入门经典》P.182

 

类似之处:

1、抽象类和接口都包含可以由派生类继承的成员;

2、抽象类和接口都不能直接实例化,但可以声明它们的变量。

 

不同之处: 

1、一个类只能继承一个抽象类,但可以实现多个接口;

2、抽象类可以有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本身也是抽象的)和非抽象成员(它们拥有代码体,也可以是虚拟的,这样就可以在派生类中重写);

3、接口成员必须都在使用接口的类上实现——它们没有代码体;

4、接口成员是公共的,但抽象类的成员可以是私有的(只要它们不是抽象的)、受保护的、内部的或受保护的内部成员;

5、接口不能包含字段、构造函数、析构函数、静态成员或常量。

posted @ 2013-10-07 15:07  小蝎莫慌  阅读(197)  评论(0编辑  收藏  举报