網頁

Visual Basic OOP Part 2 -- 多型補充

我們使用MSDN的範例來說明,以下圖片是使用繼承多型介面多型兩篇文章的程式碼修改而來,你可以對照程式碼來看,會更容易了解,先講解圖片。

繼承多型


  1. 我們在類別(BaseTax)中定義了一個可覆寫的方法Calculate(),此方法用來計算稅額。我們產生一個衍生類別(CityTax),繼承自BaseTax,然後覆寫它的Calculate()方法。
  2. 再來定義一個計算結果的方法,第一個參數是的重點,它的型別是BaseTax,然後在程式碼內呼叫它的Calculate()方法。
  3. 在主程式中,我們呼叫CalcResult()方法,第二段我們帶入的是CityTax型別,此時CalcResult()方法中的Item.Calculate()會自動去呼叫CityTax.Calculate()方法,而不是BaseTax.Calculate()方法。

這樣設計的好處是,你可以不斷加入繼承BaseTax類別的衍生類別,而不需要更動CalcResult()方法中的任何程式碼,Item.Calculate()不需要知道物件所屬的類別,只要該類別衍生自BaseTax。

介面多型


  1. 定義Shap(形狀)介面計算面積的方法。(介面無法實作Implementation)
  2. Ractangle類別實作Shap介面方法;Triangle類別實作Shap介面方法。
  3. 定義計算結果的方法ShapArea,第一個參數是重點,它的型別是Shap,然後在程式碼內呼叫它的方法item.CalculateArea()。
  4. 主程式呼叫ShapArea(),依傳入的型別不同(r 或 t),會各別呼叫Rectangle.CalculateArea()及Triangle.CalculateArea()方法。

多型定義

我們先看MSDN在Visual Basic中定義的多型
「多型」指的是您可以有多個交替使用的類別,即使每個類別是以不同的方式來實作相同的屬性或方法。多型對於物件導向程式設計來說相當重要,因為它允許您使用名稱相同的項目,而不需考慮當時使用物件的型別為何。例如,指定一個 "Car" 的基底類別,程式設計人員就可以使用多型為任何數目的衍生類別 (Derived Class) 定義不同的 "StartEngine" 方法。名為 "DieselCar" 的衍生類別所具有的 "StartEngine" 方法,可能與基底類別中名稱相同的方法完全不同。其他程序或方法可利用完全相同的方式來使用衍生類別的 "StartEngine" 方法,而不需考慮當時使用的 "Car" 物件是何種型別。
別外,MSDN在C #中定義的多型
透過繼承,類別可以當做多種型別使用,包括可以用來當做本身的型別、任何基底型別,或實作介面的任何介面型別。這稱為多型。在 C# 中,每種型別都是多型的。型別可以用來當做本身的型別或 Object 執行個體,因為任何型別都會自動將 Object 視為基底型別。

多型不但對衍生類別來說很重要,對於基底類別也十分重要。事實上,只要使用基底類別,就可以使用已轉換成基底類別型別的衍生類別物件。基底類別的設計人員可以預期在衍生型別中,基底類別的各方面有可能會改變。例如,假設有一個基底類別為汽車,那麼其所包含的行為就可能視汽車是休旅車或敞篷車而有不同。基底類別可以將這些類別成員標示成虛擬,讓代表敞篷車和休旅車的衍生類別覆寫該行為。

如果你看懂上面兩張圖及原始程式碼,這段MSDN解釋你應該就能看得懂。而且你能發現,多型與繼承有密不可分的關係。

沒有留言:

張貼留言

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