java编译时多态和运行时多态_运行时多态、编译时多态和重载、重写的关系(不区分Java和C#,保证能看懂!)...
以前在大學學習OOP的時候,知道了重載和重寫的區別,但如果要把他們和多態聯系起來,我想很多新手朋友和我當初一樣是死記的,可是時間長了,自然而然就忘記了,最近在寫測試的時候,終于“開竅”了。在這里和大家分享一下。
重載和重寫我就不解釋了,大家都知道,我現在主要是讓大家記住
重載是編譯時多態,重寫是運行時多態這句話。編譯時可以理解為“編寫”代碼;運行時也就是代碼執行。
好了,進入正題:
public void A15GetSubKeyList()
{
/*我們在方法里面定義了兩個String的變量token和topicvoteid,在定義好后,編譯器會檢查所定義的變量是否 復?合“要?求”,在定義好token后,編譯器檢查=后面的,分號“;”之前的數據參數是否滿足條件,這里的條件是值,如果定義的是string,那么他就必須是string類型的(也就是說必須有引號“”),否則就不會通過編譯,比如這里的?string topicvoteid = ;就會報錯,通不過編譯。
以上階段大家可以粗淺的理解為“編譯時”。等代碼通過編譯,開始運行了,就是“運行時”了。
*/? ? ? ? ? ? string token = "";
string topicvoteid = ;
bool isChild = false;
string papernums = "1";
SubKeyList ret = _svr.GetSubKeyList(token, topicvoteid, isChild, papernums);
Assert.IsNotNull(ret, "執行失敗");
}
回到正題,怎么把重載、重寫和編譯時、運行時聯系起來呢?請繼續往下看。
GetSubKeyList(token, topicvoteid, isChild, papernums)這個方法有4個參數,是重載的典型例子(可以再定義一個GetSubKeyList方法,無參數,即構成重載),當在編譯器在編譯時,自動檢查參數類型,不符合的參數就報錯。這樣,我們就把重載和編譯時聯系起來了(除此之外,還有重載和編譯時還有很多聯系,這里只取最簡單來解釋)。
重寫是子類對父類方法的“重新”定義,例如常見的“toString()”方法。編譯時期只檢查參數,不檢查方法內部過程。只有當代碼執行到具體的類別時,才會去調用該類“重寫”的方法,所以,重寫是運行時多態。
運行時多態、編譯時多態和重載、重寫的關系經常在面試中問道,但程度都不深,希望大家看了這篇博客后,結合自己寫代碼的量,做到真正理解多態。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java编译时多态和运行时多态_运行时多态、编译时多态和重载、重写的关系(不区分Java和C#,保证能看懂!)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 虚引用 作用_Java的强引用
- 下一篇: mysql 社区版 innodb_MyS