简单的说:
1.抽象类和接口相近,区别在于,抽象类中可以部分实现其成员。
2.抽象类中至少有一个未实现的成员。
3.抽象类不能实例化,它的派生类可以被实例化。
定义方法为:
代码如下 | 复制代码 |
以下为引用的内容:
//定义索引器 ///
|
练习题题目:
要实现U盘、MP3播放器、移动硬盘三种移动存储设备,要求计算机能通这三种设备进行数据交换,并且以后可能会有新的第三方的移动存储设备,所以计算机必须有扩展性,能与目前为止而以后可能会出现的存储设备进行数据交换。各个存储设备间读、写得实现方法不同,U盘和移动硬盘只有这两个方法,MP3Player还有一个playMusic方法;
代码如下 | 复制代码 |
using System; namespace Practices03 }
|
何时使用抽象类
当需要一组相关组件来包含一组具有相同功能的方法,但同时要求在其他方法实现中具有灵活性时,可以使用抽象类。当预料可能出现版本问题时,抽象类也具有价值,因为基类比较灵活并易于被修改。有关详细信息,请参见抽象类与接口建议。
抽象类与接口建议请参见
抽象类 | 组件中的多态性 | MustInherit (Visual Basic) | abstract (C#)
选择将功能设计为接口还是抽象类(在 Visual Basic 中为 MustInherit 类)有时是一件困难的事。“抽象类”是一种不能实例化而必须从中继承的类。抽象类可以完全实现,但更常见的是部分实现或者根本不实现,从而封装继承类的通用功能。有关详细信息,请参见抽象类。
相反,“接口”是完全抽象的成员集合,可以被看作是为操作定义合同。接口的实现完全留给开发者去做。
接口和抽象类对组件交互都很有用。如果一个方法要求一个参数形式的接口,则任何实现该接口的对象都可以用在该参数中。例如:
Visual Basic
Public Sub Spin (ByVal widget As IWidget)
End Sub
C#
public void Spin (IWidget widget)
{}
此方法可以接受任何将 IWidget 实现为小部件参数的对象,即使 IWidget 的实现可能相差很大。抽象类也允许这种多态性,但须注意以下几点:
类可能只是从一个基类继承,所以如果要使用抽象类为一组类提供多态性,这些类必须都是从那个类继承的。
抽象类还可能提供已实现的成员。因此,可以用抽象类确保特定数量的相同功能,但不能用接口这样做。
这里是一些建议,帮助您决定使用接口还是抽象类为组件提供多态性。
如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。
如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。
如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的实现。