覆寫(Overrides)
我們從基礎Class繼承之後,我們還可以依照需求對從基礎Class繼承的方法進行擴充或改寫,此機制稱覆寫。方法覆寫
於基礎Class宣告Overridable方法(可覆寫方法),使方法能被覆寫。依前一篇範例,我們在Animals.vb裡新增可被覆寫的方法。Public Class Animals Public Overridable Function Style() As String 'Do Something ... End Function Public Overridable Sub Sound() 'Do Something ... End Sub End Class
然後於衍生Class宣告Overrides方法,來覆寫基礎Class的方法。我們在Cat.vb中覆寫Animals.vb的方法。
Public Class Cat Inherits Animals Public Overrides Function Style() As String Return MyBase.Style() End Function Public Overrides Sub Sound() MyBase.Sound() End Sub End Class
一但衍生Class覆寫了基礎Class的方法,在衍生Class中所引用的將一律是覆寫的方法。
MyBase呼叫基礎Class的方法
在衍生Class覆寫基礎Class的方法後,呼叫一律是覆寫的方法,但如果有需要呼叫基礎Class的方法,則需要使用MyBase關鍵字來進行基礎Class的方法引用。在衍生Class建立新方法
在衍生Class定義的成員與基礎Class定義的成員有相同的名稱,此時Complier必須界定此成員是由衍生Class定義實作,而非繼承自基礎Class。當你要在衍生Class提供一個同名方法,而非基礎Class的覆寫方法,必須使用Shadows關鍵字。衍生Class建立新方法
依前一篇的範例,我們在Dog.vb類別檔中建立兩個新函數。Public Class Dog Inherits Animals Public Shadows Function Style() As String 'Class Dog自有方法 End Function Public Shadows Sub Sound() 'Class Dog自有方法 End Sub End Class
建構式繼承
在繼承關係中,基礎Class與衍生Class的建構式是各自獨立。Animals.vb建構式:
Public Class Animals Sub New() 'Animals建構式 End Sub End Class
Pig.vb建構式:
NotInheritable Class Pig Inherits Animals Sub New() 'Pig建構式 End Sub End Class
當我們進行物件的建立時(Dim pig3 As New Pig),程式執行流程:呼叫基礎Class建構式(Animals)→呼叫衍生Class建構式(Pig)→建立Object(pig3)
- 在Class中若沒有設定任何建構式,預設會呼叫"無參數"的建構式。
- 若在衍生Class中使用MyBase.New()呼叫基礎Class的建構式後,則衍生Class的預設建構式不會被執行。
- 若基礎Class中無任何"無參數"建構式,則衍生Class必須明確引用基礎Class的建構式。
例如:Animals.vb中只有Sub New(ByVal name As String),但無Sub New(),則所有衍生Class(Cat.vb, Dog.vb, Pig.vb)都必須明確引用Animals.vb裡的建構式,MyBase.New("小花")。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。