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