接口 抽象类 类

1、abstract class 和 interface有什么异同?

就2者自身结构而言,

1)抽象类可以有实现(包括构造函数,尽管在C#里我们很少写),而接口不可以有任何实现,重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的(没有构造函数,呵呵)。    

2)抽象类中还以有成员变量(包含静态成员变量)、属性、常量和静态方法,并且他们可以是非公共的;而接口中不能有成员变量、常量、静态方法,只能公共的属性。  

就2者继承而言。  

 1)抽象类可以从另一个类或者一个/ 多个接口派生;而接口不能从另一个类派生却可以实现另一个或多个接口。

就2者被继承而言。    

 1).一个.net 类只能从一个基类中派生即使这个基类是抽象类;然而一个.net 类可以实现多个接口。(但是如果从一个抽象类派生或者从一个/ 多个接口实现,则必须实现抽象类中抽象方法或接口中所有的方法

   相同点:1)、不能实例化;        2)、包含未实现的方法声明;        3)、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

抽象类和接口的使用:       1)如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。       2)如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。       3)如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。         4)抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能

2.虚方法和抽象方法的区别

   抽象方法  

   1)使用abstract关键字   例如: public    abstract    bool    Withdraw(…);      2)抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写      3)抽象方法是可以看成是没有实现体的虚方法      如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法。

   虚方法    1)使用virtual关键字   例如: public    virtual    bool    Withdraw(…);      2)调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。      3)虚方法必须有实现部分,子类可以覆盖也可以不覆盖,根据取决于要求。

 

3 一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法。

抽象类A1 继承抽象类A,则A1 不必实现A的所有抽象方法。

 

 

posted @ 2012-10-31 14:46  carvin  阅读(133)  评论(0编辑  收藏  举报