打印本文 打印本文 关闭窗口 关闭窗口
VB.Net中文教程(4) 类别继承(Inheritance)关系
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4675  更新时间:2009/4/23 19:01:08  文章录入:mintao  责任编辑:mintao
nd Sub
End Class

Public Class Teacher
    Inherits Person
   
    Private salary As Decimal
    Public Sub New(ByVal na As String, ByVal a As Integer, ByVal sa As Decimal)
        MyBase.New(na, a)
        salary = sa
    End Sub
    Public Sub pr()
        MyBase.Display()
        Messagebox.Show("Salary: " + str(salary))
    End Sub
End Class

Public Class Student
    Inherits Person
   
    Private student_number As Integer
    Public Sub New(ByVal na As String, ByVal a As Integer, ByVal no As Integer)
        MyBase.New(na, a)
        student_number = no
    End Sub
    Public Sub pr()
        MyBase.Display()
        Messagebox.Show("StudNo: " + str(student_number))
    End Sub
End Class
''''-----------------------------------------------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
   
    Public Sub New()
        MyBase.New()
        Form1 = Me
        ''''This call is required by the Win Form Designer.
        InitializeComponent()
        ''''TODO: Add any initialization after the InitializeComponent() call
    End Sub
    ''''Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
   
#Region " Windows Form Designer generated code "
     ........
#End Region
    Protected Sub Form1_Click( ByVal sender As Object, ByVal 
                            e As System.EventArgs)
        Dim x As New Person("Alvin", 32)
        Dim y As New Student("Tom", 36, 11138)
        x.Display()
        y.pr()
    End Sub
End Class

此程序输出﹕
             Name: Alvin    Age: 32
             Name: Tom      Age: 36
             StudNo: 11138

子类别之建构者──

    Public Sub New(ByVal na As String, ByVal a As Integer, ByVal sa As Decimal)
        ......
    End Sub

先呼叫父类别之建构者──

 Public Sub New(ByVal na As String, ByVal a As Integer)
     ......
 End Sub

协助诞生对象如下﹕
                
 接着﹐执行父类别Person的建构者内之指令﹐设定初值如下﹕
                
Person建构者工作完成了﹐轮到Student建构者的工作﹐扩充对象如下﹕

                

诞生完毕﹐执行Student建构者内之指令﹐设定初值﹕

                 
于是﹐y 对象诞生完毕了。
    子类别建构者呼叫父类别建构者之模式﹕

 
     
例如﹐Student建构者内的MyBase.New(na, a)指令将na及a值传递给Person建构者﹐于是Person建构者设定name及age之初值。除了呼叫Person建构者之外﹐还执行自己的指令──student_number = no ﹐设定student_number之初值。Student类别之对象含有三个资料成员﹐其中name及 age是由Person类别继承而来﹐就藉Person建构者设定其初值。至于Student类别自己定义之资料成员student_number﹐就由自己的指令──student_number = no设定其初值。
3. 藉「继承」扩充程序

    程序之发展是渐进的﹐软件内之类别需随企业之成长而不断扩充。类别扩充常源于﹕
(1) 企业成长了﹐产生了新类别。
    例如﹕某计算机公司﹐过去制造大型及迷你计算机﹐现在新推出个人计算机。就必须建立新子类别如下﹕

        
             图3、  程序扩充方法──衍生子类别

    再如﹐某银行过去提供支票帐户(Checking Account)及储蓄帐户(Saving Account)给客户﹐现在拟增加定期帐户(CD Account)。就得新增子类别如下﹕

              

    这新类别CD_Account继承父类别Saving_Account及Account 的资料及程序。例如﹐Account 之定义如下﹕

''''ex08.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''-----------------------------------------------------------------------------------
Class Account
    Private Shared next_number As Integer
    Protected acc_no As Integer
    Protected name As String
    Protected balance As Decimal
   
    Shared Sub New()
        next_number = 1000
    End Sub
    Public Sub New(ByVal na As String)
        name = na
        balance = 0
        acc_no = next_number
        next_number = next_number + 1
    End Sub
    Public Sub deposit(ByVal money As Decimal)
        balance = balance + money
    End Sub
    Public Sub withdraw(ByVal money As Decimal)
        balance = balance - money
    End Sub
    Public Sub close()
        acc_no = -1
    End Sub
End Class

Class Saving_Account
    Inherits Account
   
    Private interest_rate As Double
    Public Sub New(ByVal na As String, ByVal rate As Double)
        MyBase.New(na)
        Me.interest_rate = rate
    End Sub
    Public Function comp_interest() As Double
        comp_interest = balance * interest_rate
    End Function
    Public Sub display()
        Messagebox.Show("ACC_NO: " + str(MyBase.acc_no))
        Messagebox.Show("余额: " + str(Me.balance) + "    利息: "
                        + str(comp_interest()))
    End Sub
End Class
''''-----------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
   
    Public Sub New()
        MyBase.New()
        Form1 = Me
        ''''This call is required by the Win Form Designer.
        InitializeComponent()
        ''''TODO: Add any initialization after the InitializeComponent() call
    End Sub
    ''''Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
#Region " Windows Form Designer generated code "
      .......
#End Region
    Protected Sub Form1_Click( ByVal sender As Object, ByVal
                            e As System.EventArgs)
        Dim saving_acc As New Saving_Account("Tom Bush", 0.085)
        Dim account As Saving_Account
        account = New Saving_Account("Linda Lin", 0.008)
        account.deposit(5000)
        account.withdraw(2500)
        account.display()
        account.close()
    End Sub
End Class

此程序输出﹕
             ACC_NO: 1001
             余额: 2500
             利息: 20
    因Saving_Account继承Account ﹐所以Saving_Account类别亦拥有deposit() 、withdraw()及close() 三个程序。请换个角度﹐从Saving_Account类别之设计者来看﹐他透过继承关系来「借用」父类别之程序。「借用」又称为「再使用」(Resue) ﹐能使得子类别简单但却强而有力。就如Saving_Account类别显

上一页  [1] [2] [3] [4] [5] [6]  下一页

打印本文 打印本文 关闭窗口 关闭窗口