1、抽象类(abstract class)和接口(interface)有什么异同?
抽象类定义:声明方法的存在而不去实现它的类叫做抽象类(抽象类对某具体类型的部分实现------抽象类是对具体的抽象。)
接口定义:接口是抽象类的变体(接口就是一些方法特征的集合------接口是对抽象的抽象)
不同点:
1).抽象类可以有实现(包括构造函数),而接口不可以有任何实现,重要的是抽象类可以包括抽象方法
这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。
接口中所有方法都必须是未实现的,都是抽象的。
2).抽象类中还以有成员变量(包含静态成员变量)、属性、常量和静态方法,并且他们可以是非公共的;
而接口中不能有成员变量、常量、静态方法,只能有公共的属性。
3).抽象类可以从另一个类或者一个/ 多个接口派生;而接口不能从另一个类派生却可以实现另一个或多个接口。
4).一个.net 类只能从一个基类中派生即使这个基类是抽象类;然而一个.net 类可以实现多个接口。
(但是如果从一个抽象类派生或者从一个/ 多个接口实现,则必须实现抽象类中抽象方法或接口中所有的方法)
相同点:
1)、都不能被实例化;
2)、包含未实现的方法声明;
3)、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
抽象类和接口的使用:
1)如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
2)如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
3)如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。
4)抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。 |
|