正在阅读:VB.NET面向对象的实现(3)继承VB.NET面向对象的实现(3)继承

2004-02-14 09:34 出处:PConline 作者:ZSC 责任编辑:pjl
继承 本教程设计的内容有:基本的继承、阻止继承、继承与辖域、保护方法、重载方法、重载与构造方法、创建基类以及抽象方法。 当VB面向对象特性变得越来越强大的时候,我们会发觉VB缺少了继承的内容。继承是类为了得到父界面或者现有父类的一种能力。当创建一个新的从父界面或者现有父类继承而来的类的时候,我们就为原来的类创建了一个子类。这就是我们所知的父子关系。 现有许多关于继承的术语,但是很多是多余的。原来的类,即我们所继承的界面和行为可以由以下的几种互换的说法: Parent class (父类) Superclass (超级类) Base class (基类) 而由原来的类继承而来的界面或者行为也有以下的几种互换的说法: Child class (子类) Subclass (次类) 继承是用于生物学上的名词。比如,狗是犬科动物而犬科动物又是哺乳动物,因此作为犬科动物,狗继承了哺乳动物所有的属性和行为,这就是继承的原始涵义,即生物学上的继承。在这里借用继承这个名词用于面向对象中,具有许多相似之处。 为了在VB中满足许多程序设计人员能够象在Visual C++中利用面向对象的功能,特别是继承的功能,VB.NET开始有了继承的概念。但是VB.NET还是不允许多重继承,即子类不能有多个父类继承而来,它只能继承一个父类。而VB.NET允许深度的继承分级结构,即一个子类可以有另外一个子类继承而来;但是VB.NET还是不允许同时继承多个父类。 在父子关系中,父对象可以拥有多个子对象,而子对象虽然都是由父对象继承而来但是它们是不同类型的。举个例子,一群子女虽然都是由父母生育的,但是他们还是有不同的相貌、性格等等。 接下来我们详细介绍VB.NET的继承。 实现基本的继承 为了探讨继承,我们先考虑以下一个商业的例子:每一个定货都有一个线路项,可能有产品线路项和服务线路项。这两种线路项是有些不同的。但是当我们在分开实现ProductLine和ServiceLine类的时候,我们就会发现其实它们有许多相同之处。如果分开编写这两个类的代码,不仅编程效率低,而且程序代码也难以维护,所以最好的方法就是使用它们一些相同的代码。 为了实现使用相同的代码,继承就起了很大的作用了。使用继承,我们可以创建一个LineItem类(父类),它包含了所有的共用代码。然后我们再创建ProductLine和ServiceLine子类,这两个类是由LineItem继承而来的。这样它们就可以自动地获得所有的共用代码了。 假如LineItem类为: Public Class LineItem Private mintID As Integer Private mstrItem As String Private msngPrice As Single Private mintQuantity As Integer Public Property ID() As Integer Get Return mintID End Get Set mintID = value End Set End Property Public Property Item() As String Get Return mstrItem End Get Set mstrItem = Value End Set End Property Public Property Price() As Single Get Return msngPrice End Get Set msngPrice = Value End Set End Property Public Property Quantity() As Integer Get Return mintQuantity End Get Set mintQuantity = Value End Set End Property Public Function Amount() As Single Return mintQuantity * msngPrice End Function End Class 这个类中有所有的共用代码以及一些基本的数据区域和用于计算项目价钱的方法。 如果线路项对于产品而言,我们则需要再增加一些代码。这个项目的数值应该要验证一下确保它指一个实际的产品,并且可能的话我们也想提供产品的描述,所以ProductLine类的代码如下: Public Class ProductLine Inherits LineItem Private mstrDescription As String Public ReadOnly Property Description() As String Get Return mstrDescription End Get End Property Public Sub New(ByVal ProductID As String) Item = ProductID (此处你可以从数据库中转载产品数据) End Sub End Class 上面语句中我们已经使用的继承语句: Inherits LineItem 这条语句使ProductLine类获得了LineItem类的所有的界面元素或者行为。所以我们可以如下编写客户代码: Protected Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Dim pl As ProductLine pl = New ProductLine(23abc MessageBox.Show(pl.Item) MessageBox.Show(pl.Description) End Sub 以上的代码使用了从LineItem类继承而来的Item属性以及ProductLine中的Description属性。 类似地,我们可以编写ServiceLine: Public Class ServiceLine Inherits LineItem Private mdtDateProvided As Date Public Sub New() Quantity = 1 End Sub Public Property DateProvided() As Date Get Return mdtDateProvided End Get Set mdtDateProvided = Value End Set End Property End Class 这里要注意的是,上面的继承语句表明ServiceLine是LineItem的子类。而DateProvided属性是从LineItem类中加入的界面。
键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品