VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • vb.net教程之继承

继承

本教程设计的内容有:基本的继承、阻止继承、继承与辖域、保护方法、重载方法、重载与构造方法、创建基类以及抽象方法。
当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类中加入的界面。


相关教程