繼承 (Inheritance) 是一項重要的物件導向概念。它可以讓您建立相關類別的階層架構,並且重複使用現有類別中定義的功能。
在本文中,您將會學到如何在 Visual Basic .NET 中使用繼承。您將會定義一個基底類別 (Base Class),它含有一般銀行帳戶的欄位和方法。然後您要定義一個代表特定帳戶種類的衍生類別 (Derived Class)。這個衍生類別會從基底類別繼承一些成員、取代某些成員,然後加入一些這種帳戶類型的新成員。
主要需求
必要基礎知識:
-
Visual Basic .NET 語法
-
物件導向概念
建立新主控台應用程式
-
啟動 Visual Studio .NET 並且在本機電腦上建立一個名為
UseInheritance
的新 Visual Basic 主控台應用程式 (Console Application)。
-
在
[加入新項目]
對話方塊中,輸入
Account.vb
到
[名稱]
欄位。按一下
[開啟]
。
-
Visual Studio .NET 便會顯示 Account.vb 檔案。請檢視這個程式碼,熟悉一下內容。
-
儲存專案。
建立抽象基底類別
-
在
[專案]
功能表上,按一下
[加入類別]
。
-
將
MustInherit
修飾詞 (Modifier) 加入到 Account 類別,使 Account 成為抽象類別 (Abstract Class):
Public MustInherit Class Account
End Class
撰寫基底類別的程式碼
-
加入兩個欄位到 Account 類別:
Private Name As String ' Only accessible in base class
Protected Balance As Double ' Accessible in base class and derived class
-
加入一個建構函式 (Constructor) 來初始化這些欄位:
Public Sub New(ByVal Nm As String, ByVal Bal As Double)
Name = Nm
Balance = Bal
End Sub
-
將下列方法加入到類別。
Overridable
關鍵字表示這些方法在衍生類別中可以被取代:
Public Overridable Sub Credit(ByVal Amount As Double)
Balance += Amount
End Sub
Public Overridable Sub Debit(ByVal Amount As Double)
Balance -= Amount
End Sub
Public Overridable Sub Display()
Console.WriteLine("Name=" & Name & ", " & "Balance=" & Balance)
End Sub -
將下列方法加入到類別。因為這個方法沒有標記為
Overridable
,所以它在衍生類別中不能被取代。這個方法提供了變更帳戶持有人名稱的能力。
Public Sub ChangeName(ByVal newName As String)
Name = newName
End Sub
-
將下列方法加入到類別。
MustOverride
關鍵字表示這個類別在衍生類別中必須被取代:
Public MustOverride Function CalculateBankCharge() As Double
建立衍生類別
-
在
[專案]
功能表上,按一下
[加入類別]
。
-
在
[加入新項目]
對話方塊中,輸入
SavingsAccount.vb
到
[名稱]
欄位。按一下
[開啟]
。
-
Visual Studio .NET 便會顯示 SavingsAccount.vb 檔案。請檢視這個程式碼,熟悉一下內容。
-
變更 SavingsAccount 類別的定義如下,讓 SavingsAccount 從 Account 繼承 (請注意
Inherits
關鍵字必須出現在新的一行):
Public Class SavingsAccount
Inherits Account
End Class
撰寫衍生類別的程式碼
-
加入一個欄位到 SavingsAccount 類別:
Private MinBalance As Double ' If the balance drops below MinBalance,
' the bank will charge a fee on the account -
加入一個建構函式 (如下所示) 來初始化基底類別和這個類別中的欄位:
Public Sub New(ByVal Nm As String, _
ByVal Bal As Double, _
ByVal Min As Double)
MyBase.New(Nm, Bal) ' Call base-class constructor first
MinBalance = Min ' Then initialize fields in this class
End Sub -
將下列方法加入 SavingsAccount 類別。這些方法會取代從基底類別繼承的
Overridable
方法:
Public Overrides Sub Debit(Amount As Double)
If Amount <= Balance Then ' Use balance, inherited from base class
MyBase.Debit(Amount) ' Call Debit, inherited from base class
End If
End Sub
Public Overrides Sub Display()
MyBase.Display() ' Call Display, inherited from base class
Console.WriteLine("$5 charge if balance goes below $" & MinBalance)
End Sub -
您必須取代所有來自基底類別的
MustOverride
方法。將下列方法加入到 SavingsAccount 類別:
Public Overrides Function CalculateBankCharge() As Double
If Balance < MinBalance Then
Return 5.0
Else
Return 0.0
End If
End Function
驗證它是否能運作
-
在 [程式碼檢視] 視窗中顯示 Module1.vb 的程式碼。
-
在
Main
方法中,建立一個 SavingsAccount 物件,如下所示:
Dim sa As SavingsAccount = New SavingsAccount("Freda Smith", 100.00, 25)
sa.Display() -
加入下列程式碼來呼叫 SavingsAccount 或 Account 中的
Public
方法。
sa.Credit(100)
sa.Debit(180)
sa.ChangeName("Freda Jones")
sa.Display()
Console.WriteLine("Bank charge: $" & sa.CalculateBankCharge()) -
建置這個應用程式。
-
在
[偵錯]
功能表上,按一下
[啟動但不偵錯]
來執行應用程式。應用程式便會在主控台上顯示下列資訊:
Name=Freda Smith, balance=100
$5 charge if balance goes below $25
Name=Freda Jones, balance=20
$5 charge if balance goes below $25
Bank charge: $5
-
再執行一次應用程式,但是這次要使用偵錯工具。在
Main
方法的開頭設定一個中斷點,並且從
[偵錯]
功能表選取
[啟動]
。逐步執行每一陳述式並且觀察應用程式執行中呼叫了哪些方法。
本文件是根據 Microsoft Knowledgebase 文件編號 Q307222 翻譯的。若要參考原始英文文件內容,請至以下網址: