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] 下一页 |