最近看了一些書上講的多型,發現相互之間是有衝突的,最主要的衝突是對過載是不是多型的觀點,看過這些書以後,我有了自己的看法,特此寫出來給大家分享:
一、首先我們看一下多型的定義:多型是指程式中定義的引用變數所指向的具體型別和通過該引用變數發出的方法或者屬性呼叫在程式設計時不確定,而在執行期間才確定。
從定義來看,需要注意幾點:
1)引用變數指向的具體型別在程式設計時不確定
2)引用變數發出的方法或者屬性呼叫在程式設計時不確定
3)以上兩點不確定,在執行期間能夠確定
從以上3點來看,跟過載沒有任何關係。
二、我們再看一下多型的特性:
1)子類繼承父類
2)子類覆蓋父類
3)父類引用指向子類物件
在以上圖中,我們看到了boo和coo都繼承了aoo,不同的是boo沒有覆蓋aoo的classname這個屬性,但是coo有覆蓋,如果我們用aoo的引用變數去分別指向boo和coo的物件,然後透過該引用變數去呼叫getclassname()方法,獲取classname的值,得到的結果是不一樣的,這種形式叫做多型,如下圖所示
從上圖列印的結果中我們能看到,當子類覆蓋父類的屬性的時候,我們取出來的值是我們覆蓋後的屬性值,而如果我們不覆蓋,我們取到的還是原來父類中的屬性值,但是不管我們是否覆蓋,我們在呼叫getclassname()這個方法的時候,所執行的都是子類中的方法,而不是父類的方法,這就是多型。過載是指方法名相同,引數不同的多個方法,這叫過載,過載首先和繼承沒有任何關係,更不涉及到覆蓋父類的屬性或者方法,也和父類動態的去引用子類物件沒有任何關係,所以說,過載不是多型!
分享是一種品質
相信很多人都有這樣的經歷 在乙個問題上和別人競爭,當自己掌握一些有用的資訊時總是嚴加保護,覺得自己手中握著屠龍寶刀並絲毫不洩漏半點有關資訊,生怕別人會奪了自己的風頭。即使在我們大學中,這種現象也有,臨近考試的時候,有的所謂高手花了很大的精力,把老師圈起來的重點整理了出來作為自己的複習資料,並且不告訴...
「不浪費」是一種精神
又乙個寒假過去了。寒假前,公尺老師為我們的住宿 吃飯問題著急 又不忍心發脾氣的場景,還在讓我心裡偷著樂著。這乙個寒假,我們在食堂吃飯,公尺老師努力的結果。為了讓我們在假期有乙個好的生活 學習環境,吃飯問題 住宿問題 喝水問題 安全問題,公尺老師處處盡心。在食堂吃飯的過程中,出現了乙個問題 浪費。浪費...
直播程式設計 一邊是分享,一邊是賺錢
donate 捐助 是livecoding.tv在最初上線的時候已經具備的功能。觀眾可以通過paypal匯款給他們支援的直播者。目前為止,livecoding.tv已經向直播者支付了17萬美元捐助金。每一筆捐助金直接支付給直播者,不收取任何中介費。直播者只需開通乙個paypal帳號,就可以接收觀眾的...