續上兩篇。
三、多型
1、什麼是多型
多型性(polymorphisn)是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。多型實現另乙個目的:介面重用!多型的作用,就是為了類在繼承和派生的時候,保證使用「家譜」中任一類的例項的某一屬性時的正確呼叫。
2、實現多型的方式
實現多型,有二種方式,覆蓋(或者覆寫,重寫),過載。
覆蓋,是指子類重新定義父類的虛函式的做法。
過載,是指允許存在多個同名函式,而這些函式的參數列不同(或許引數個數不同,或許引數型別不同,或許兩者都不同)。
3、覆蓋和過載的注意點
(1)、過載的概念並不屬於「物件導向程式設計」,過載的實現是:編譯器根據函式不同的參數列,對同名函式的名稱做修飾,然後這些同名函式就成了不同的函式(至少對於編譯器來說是這樣的)。舉例來說,有兩個同名函式:function func(p:integer):integer;和function func(p:string):integer;。那麼編譯器做過修飾後的函式名稱可能是這樣的:int_func、str_func。對於這兩個函式的呼叫,在編譯器間就已經確定了,是靜態的(記住:是靜態)。也就是說,它們的位址在編譯期就繫結了(早繫結),因此,過載和多型無關!(實現多型的方式之一是過載,而「過載和多型無關」,多麼奇怪的解釋,自己琢磨吧。)
(2)、當子類重新定義了父類的虛函式後,父類指標根據賦給它的不同的子類指標,動態(記住:是動態!)的呼叫屬於子類的該函式,這樣的函式呼叫在編譯期間是無法確定的(呼叫的子類的虛函式的位址無法給出)。因此,這樣的函式位址是在執行期繫結的(晚邦定)。
(3)、結論:過載只是一種語言特性,與多型無關,與物件導向也無關,因為「如果它不是晚繫結,它就不是多型
覆蓋的**如下:
關於多型可以討論一整本書,這裡只是簡明扼要介紹一下,有意者可以參考其他專業資源,這裡不再贅述。
C 物件導向三大特徵
驗專案那天 問我,物件導向三大特徵都有什麼呀?封裝 繼承 多型 那分別講一講這三大特徵吧!我 enmmmmm 確實是這樣,要我真的說出來的話,我說不出來,我不能夠很好地描述出來,於是我準備在學習一遍。封裝是指將物件的資訊進行隱藏,使它的使用者無法看到,而只是提供乙個訪問介面。在類中,通過不同的修飾符...
物件導向三大特徵
1.繼承 什麼是繼承 繼承是一種建立新類的方式,在python中,新建的類可以繼承乙個或多個父類,父類又可稱為基類或超類,新建的類稱為派生類或子類 python中類的繼承分為 單繼承和多繼承 class parentclass1 定義父類 pass class parentclass2 定義父類 p...
物件導向三大特徵
是指將物件的狀態資訊隱藏在物件內部,不允許外部程式直接訪問而是通過類提供的方法實現類內資訊的操作和訪問。可以通過j a中的訪問控制符來實現。實現復用。j a中,通過extends實現繼承 每個類只有乙個直接父類 j a.lang.object是所有類的直接 間接父類 子類獲得父類的全部屬性和方法 除...