java的多型總結

2021-08-31 15:57:25 字數 1273 閱讀 1220

老畢的"編譯看左邊,執行看右邊"(多型執行)

(對物件導向語言中理解多型、繼承很有幫助~~~)

在多型中,非靜態成員函式的特點:編譯看左邊,執行看右邊。

老畢在講到多型執行問題時,結合下面的例子,給我們總結了一套口訣:「成員變數,靜態方法看左邊;非靜態方法:編譯看左邊,執行看右邊。」意思是:當父類變數引用子類物件時(fu f = new zi();),在這個引用變數 f 指向的變數/方法中,他對成員變數和靜態方法的呼叫與父類是一致的,他呼叫非靜態方法時,在編譯時是與父類一致的(檢視父類有沒有該函式,沒有就會發生編譯錯誤,提示fu 中找不到要呼叫函式),執行時如果子類中發生了複寫就與子類一致。(如果右邊沒有再看左邊。若都沒有才會報錯)

例:class fu

void print()

}class zi extends fu

void print()

}class demo

}輸出結果:

5fu show()

zi print()

8zi show()

zi print()

個人分析:

fu f = new zi();----------首先了解變數f到底是什麼,把這句子分2段:fu f;這是宣告乙個變數f為fu這個類,那麼知道了f肯定是fu類。然後我們f=newzi();中建立乙個子類物件賦值給了f,結果是什麼??

結果是,擁有了被zi類函式覆蓋後的fu類物件----f------。

-------------------------------------------也就是說:

只有子類的函式覆蓋了父類的函式這乙個變化,但是f肯定是fu這個類,也就是說f不可能變成其他比如zi這個類等等(突然f擁有了zi類特有函式,成員變數等都是不可能的)。所以f所代表的是函式被複寫後(多型的意義)的乙個fu類,而fu類原來有的成員變數(不是成員函式不可能被複寫)沒有任何變化----------------獲得結論:a:成員變數:編譯和執行都看fu。

但是f的fu類函式被複寫了。--------------獲得結論:b:非靜態方法:編譯看fu,執行看zi

對於靜態方法:編譯和執行都看fu!!

其實很簡單,首先我們要理解靜態情況下發生了什麼?

----------------當靜態時,fu類的所有函式跟隨fu類載入而載入了。也就是fu類的函式(是先於物件建立之前就存在了,無法被後出現的zi類物件所複寫的,所以沒發生複寫,那麼獲得:c:靜態方法:編譯和執行都看fu。

java 多型總結

多型 01 父類的引用指向自己子類的多型 02 多型的存在提高了程式的擴充套件性 03 多型的前提 必須是類與類之間有關係 要麼繼承要麼實現 還有就是存在覆蓋 04 子類向上轉型 和父類向下轉型 instanceof abstract class animal class car extends a...

java多型總結

簡單的說就是父類引用指向子類物件.一種方法,多種實現.規則 成員變數 編譯看左邊 父類 執行看左邊 父類 成員方法 編譯看左邊 父類 執行看右邊 子類,動態繫結 public class polymorphic 成員變數 編譯看左邊 父類 執行看左邊 父類 成員方法 編譯看左邊 父類 執行看右邊 子...

java多型的個人總結

多型是物件導向的重要特性,簡單點說 乙個介面,多種實現 就是同一種事物表現出的多種形態。程式設計其實就是乙個將具體世界進行抽象化的過程,多型就是抽象化的一種體現,把一系列具體事物的共同點抽象出來,再通過這個抽象的事物,與不同的具體事物進行對話。對不同類的物件發出相同的訊息將會有不同的行為。比如,你的...