從現有的類別建置類別:使用繼承
更新:2007 年 11 月
在本課程中,您將學習如何使用繼承,根據現有類別建立類別。
許多真實生活物件都有共同的屬性和行為,例如,所有汽車都有輪子和引擎,都能夠行駛,也能夠停止。但是,有些汽車也具備非共同的屬性,例如,敞蓬車有可移動的車頂,可以透過電動方式或是用手搖下來。
如果您建立某個物件來代表汽車,您可能會想要包含所有共同屬性 (Attribute) 和行為的屬性 (Property) 和方法,但可能不要加入敞蓬車頂之類的屬性 (Attribute),因為這種屬性 (Attribute) 並不適用於所有汽車。
您可以使用「繼承」,建立衍生自汽車類別的「敞蓬車」類別。它繼承了所汽車類別的屬性,而且可以入加所有敞蓬車特有的屬性和行為。
從現有類別繼承
Inherits 陳述式是以「基底類別」的現有類別為基礎,宣告稱為「衍生類別」的新類別。衍生類別繼承基底類別中定義的所有屬性、方法、事件、欄位及常數。下列程式碼顯示衍生類別的宣告。
Class DerivedClass
Inherits BaseClass
End Class
之後,新類別 DerivedClass 可以執行個體化,其存取的屬性和方法就跟 BaseClass 一樣,而且您可以加入新類別特有的新屬性和方法。例如,看一下您在上一個課程中建立的 Persons 類別。
假設您想要有一個代表棒球隊員的類別。棒球隊員具有 Persons 類別中定義的所有屬性,但是他們也有獨特的屬性,如號碼和位置。此時,您就要建立從 Persons 繼承的新衍生類別,並加入新屬性至該類別,而不是將這些屬性加入至 Persons 類別。
試試看!
若要建立衍生類別
開啟您在上一個課程中所建立的 Persons 專案。如果您並未儲存,請回到測試類別課程,完成該程序。
在 [方案總管] 中,選取 [Persons] 專案節點。
在 [專案] 功能表中選擇 [加入類別]。
在 [加入新項目] 對話方塊中,在 [名稱] 對話方塊內輸入 Players,然後按一下 [加入]。
新的類別模組就會加入至專案。
在 [程式碼編輯器] 中,就在 Public Class Players 行下面加入下列程式碼。
Inherits Persons
加入下列程式碼,以定義兩個新屬性。
Private numberValue As Integer Private positionValue As String Public Property Number() As Integer Get Number = numberValue End Get Set(ByVal value As Integer) numberValue = value End Set End Property Public Property Position() As String Get Position = positionValue End Get Set(ByVal value As String) positionValue = value End Set End Property
在 [檔案] 功能表上,按一下 [全部儲存]。
測試 Players 類別
現在,您已經建立衍生自 Persons 類別的 Players 類別。在下列程序中,您將建立新的程式,以測試 Players 類別。
若要建立類別的測試專案
指向 [檔案] 功能表上的 [加入],然後按一下 [新增專案]。
在 [加入新的專案] 對話方塊中,請選取 [範本] 窗格中的 [Windows 應用程式]。
在 [名稱] 方塊中,輸入 PlayerTest,再按 [確定]。
新的 Windows Form 專案隨即加入至 [方案總管],並且出現新的表單。
選取 [方案總管] 中的 PlayerTest 專案,然後按一下 [專案] 功能表上的 [設定為啟始專案]。
選取 [方案總管] 中的 PlayerTest 專案,然後按一下 [專案] 功能表上的 [加入參考]。
[加入參考] 對話方塊隨即開啟。
按一下 [專案] 索引標籤,然後選擇 [Persons],再按一下 [確定]。
按兩下表單,開啟 [程式碼編輯器],然後就在程式行 Public Class Form1 下面輸入以下宣告。
Dim player1 As New Persons.Players Dim player2 As New Persons.Players
這樣就會宣告 Players 類別的兩個新執行個體。
在 [檔案] 功能表上,按一下 [全部儲存]。
若要測試衍生的類別
在 [方案總管] 中,選取 PlayerTest 專案中的 Form1,然後按一下 [檢視] 功能表上的 [程式碼]。
在 [程式碼編輯器] 中,將下列程式碼加入至 Form1_Load 事件程序。
With player1 .FirstName = "Andrew" .LastName = "Cencini" .Number = 43 .Position = "Shortstop" End With With player2 .FirstName = "Robert" .LastName = "Lyon" .Number = 11 .Position = "Catcher" End With
在 [方案總管] 中,選取 PlayerTest 專案中的 Form1,然後按一下 [檢視] 功能表上的 [設計工具]。
從 [工具箱] 中,將兩個 [Button] 控制項拖曳到表單上。
選取第一個 [Button] 控制項,然後在 [屬性] 視窗中將 [Text] 屬性設定為 At Bat。
選取第二個 [Button] 控制項,然後在 [屬性] 視窗中將 [Text] 屬性設定為 On Deck。
按兩下第一個按鈕 (At Bat),開啟 [程式碼編輯器],然後在 Button1_Click 事件處理常式中,輸入以下程式碼。
MsgBox(player1.Position & " " & player1.FullName & ", #" & _ CStr(player1.Number) & " is now at bat.")
請注意,您是使用繼承自 Persons 基底類別的 FullName 方法。
在 Button2_Click 事件處理常式中加入以下程式碼。
MsgBox(player2.Position & " " & player2.FullName & ", #" & _ CStr(player2.Number) & " is on deck.")
請按 F5 執行程式。按一下每個按鈕,查看結果。
從 [檔案] 功能表上,選擇 [全部儲存]。
後續步驟
在本課程中,您學到如何從現有類別繼承,以及如何擴充衍生類別。您可以在詳述:覆寫成員中更深入學習有關繼承的情形,或者,您也可以繼續進行下一個課程,學習有關集合的情形。
下一個課程:使用集合管理多個物件