1、abstract class 和 interface有什么异同?
答:1).抽象类可以有实现(包括构造函数),而接口不可以有任何实现,重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的。
2).抽象类中还以有成员变量(包含静态成员变量)、属性、常量和静态方法,并且他们可以是非公共的;而接口中不能有成员变量、常量、静态方法,只能有公共的属性。
3).抽象类可以从另一个类或者一个/ 多个接口派生;而接口不能从另一个类派生却可以实现另一个或多个接口。
4).一个 类只能从一个基类中派生即使这个基类是抽象类;然而一个 类可以实现多个接口。(但是如果从一个抽象类派生或者从一个/ 多个接口实现,则必须实现抽象类中抽象方法或接口中所有的方法)
相同点:1)、不能实例化;
2)、包含未实现的方法声明;
3)、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
抽象类和接口的使用:
1)如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
2)如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
3)如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。 
4)抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
2.虚方法和抽象方法的区别
抽象方法 
1)使用abstract关键字  例如: public    abstract    bool    Withdraw(…); 
2)抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写 
3)抽象方法是可以看成是没有实现体的虚方法 
如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法。
虚方法
1)使用virtual关键字  例如: public    virtual    bool    Withdraw(…); 
抽象类的使用
2)调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。 
3)虚方法必须有实现部分,子类可以覆盖也可以不覆盖,根据取决于要求。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。