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

Public Class Teacher
    Inherits Person
   
    Private salary As Decimal
    Public Sub tr_SetValue( ByVal na As String, ByVal a As Integer, ByVal
                        sa As Decimal)
        SetValue(na, a)
        salary = sa
    End Sub
    Public Sub pr()
        MyBase.Display()
        Messagebox.Show("Salary: " + str(salary))
    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 steven As Teacher
        steven = New Teacher()
        steven.tr_SetValue("Steven", 35, 35000)
        steven.pr()
    End Sub
End Class

此程序输出如下﹕
Name: Steven     Age: 35
Salary: 35000

现在﹐Teacher 类别含有三个资料成员﹕
       1. name ──从Person类别继承而来。
       2. age ──从Person类别继承而来。
       3. salary ──自己定义的。

此外﹐也含有五个程序成员﹕
       1. SetValue() ──从Person继承而来。
       2. birthYear()──从Person继承而来。
       3. Display() ──从Person继承而来。
       4. tr_SetValue()──自己定义的。
       5. pr()──自己定义的。

    由于SetValue()为 Teacher之程序成员﹐所以tr_SetValue()能直接呼叫SetValue()来设定name及age值﹔之后﹐tr_SetValue()自己设定salary之值。同理﹐pr()能直接呼叫 Display()来显示name及age之内容﹔之后﹐pr()自己输出salary之值。也许﹐您会问道﹕子类别自己定义之程序﹐是否能与父类别之程序同名称呢﹖答案是肯定的﹐而且是常见之写法。如果名称相同但是参数不一致(像参数个数不同或参数型态不同),就是父子类别之间的程序多重定义(Procedure Overloading)了,必须写上Overloads字眼。例如﹕上述程序相当于──

''''ex04.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''------------------------------------------------------------------------------------------
Class Person
    Private name As String
    Private age As Integer
    Public Sub New()
    End Sub
    Public Sub SetValue(ByVal na As String, ByVal a As Integer)
        name = na
        age = a
    End Sub
    Public Function birthDay() As Integer
        birthDay = 2001 - age
    End Function
    Public Sub Display()
        Messagebox.Show("Name: " + name + "   Age: " + str(age))
    End Sub
End Class

Class Teacher
    Inherits Person
   
    Private salary As Decimal
    Public Overloads Sub SetValue( ByVal na As String, ByVal a As Integer, ByVal
                               sa As Decimal)
        SetValue(na, a)
        salary = sa
    End Sub
    Public Sub pr()
        MyBase.Display()
        Messagebox.Show("Salary: " + str(salary))
    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 steven As Teacher
        steven = New Teacher()
        steven.SetValue("Steven", 35, 35000)
        steven.pr()
    End Sub
End Class

此程序输出如下﹕
                   NAME: Steven
                   AGE : 35
                   Salary: 35000

此种情况﹐Teacher 类别拥有两个 SetValue()程序﹐一个由Person继承而来﹐一个是自己定义的。同时﹐也拥有两个Display()程序。此时﹐计算机如何分辨它们呢﹖计算机依据程序的参数来决定呼叫那一个程序,当您写成 steven.SetValue("Steven", 35, 35000)时,此SetValue()是子类别自己的SetValue()。而写成SetValue(na,a)时,则是由Person类别继承而来之SetValue()程序。此VB程序已定义如下之类别关系﹕

                   
接下来﹐再为Person定义一个子类别── Student。程序如下﹕

''''ex05.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''------------------------------------------------------------------------------------------
Public Class Person
    Private name As String
    Private age As Integer
    Public Sub New()
    End Sub
    Public Sub SetValue(ByVal na As String, ByVal a As Integer)
        name = na
        age = a
    End Sub
    Public Function birthDay() As Integer
        birthDay = 2001 - age
    End Function
    Public Sub Display()
        Messagebox.Show("Name: " + name + "   Age: " + str(age))
    End Sub
End Class

Public Class Teacher
    Inherits Person
   
    Private salary As Decimal
    Public Overloads Sub SetValue( ByVal na As String, ByVal a As Integer, ByVal
                               sa As Decimal)
        SetValue(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 Overloads Sub SetValue( ByVal na As String, ByVal a As Integer, ByVal
                     

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

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