物件導向程式設計入門(Object-Oriented Programming,OOP) for Visual Basic(五)--覆寫Overrides

覆寫(Overrides)

我們從基礎Class繼承之後,我們還可以依照需求對從基礎Class繼承的方法進行擴充或改寫,此機制稱覆寫

方法覆寫

於基礎Class宣告Overridable方法(可覆寫方法),使方法能被覆寫。依前一篇範例,我們在Animals.vb裡新增可被覆寫的方法。

01Public Class Animals
02 
03    Public Overridable Function Style() As String
04        'Do Something ...
05    End Function
06 
07    Public Overridable Sub Sound()
08        'Do Something ...
09    End Sub
10End Class

然後於衍生Class宣告Overrides方法,來覆寫基礎Class的方法。我們在Cat.vb中覆寫Animals.vb的方法。

01Public Class Cat
02    Inherits Animals
03 
04    Public Overrides Function Style() As String
05        Return MyBase.Style()
06    End Function
07 
08    Public Overrides Sub Sound()
09        MyBase.Sound()
10    End Sub
11End Class

一但衍生Class覆寫了基礎Class的方法,在衍生Class中所引用的將一律是覆寫的方法

MyBase呼叫基礎Class的方法

在衍生Class覆寫基礎Class的方法後,呼叫一律是覆寫的方法,但如果有需要呼叫基礎Class的方法,則需要使用MyBase關鍵字來進行基礎Class的方法引用

在衍生Class建立新方法

在衍生Class定義的成員與基礎Class定義的成員有相同的名稱,此時Complier必須界定此成員是由衍生Class定義實作,而非繼承自基礎Class。當你要在衍生Class提供一個同名方法,而非基礎Class的覆寫方法,必須使用Shadows關鍵字。

衍生Class建立新方法

依前一篇的範例,我們在Dog.vb類別檔中建立兩個新函數。

01Public Class Dog
02    Inherits Animals
03 
04    Public Shadows Function Style() As String
05        'Class Dog自有方法
06    End Function
07 
08    Public Shadows Sub Sound()
09        'Class Dog自有方法
10    End Sub
11 
12End Class

建構式繼承

在繼承關係中,基礎Class與衍生Class的建構式是各自獨立。

Animals.vb建構式:
1Public Class Animals
2 
3    Sub New()
4        'Animals建構式
5    End Sub
6End Class

Pig.vb建構式:
1NotInheritable Class Pig
2    Inherits Animals
3 
4    Sub New()
5        'Pig建構式
6    End Sub
7End 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("小花")。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。