多態(tài)的實(shí)現(xiàn)機(jī)制

多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)中代碼重用的一個(gè)重要機(jī)制村砂,它表示當(dāng)同一個(gè)操作作用在不同對(duì)象時(shí)保屯,會(huì)有不同的語義辜膝,從而產(chǎn)生不同的結(jié)果。在java語言中飞蛹,多態(tài)主要有以下兩種表現(xiàn)方式:
1.方法的重載(overload)谤狡。重載是指同一個(gè)類中有多個(gè)同名的方法,但這些方法有著不同的參數(shù)桩皿,因此在編譯時(shí)就可以確定到底調(diào)用哪個(gè)方法豌汇,它是一種編譯時(shí)多態(tài)幢炸。重載可以被看做一個(gè)類中的方法多態(tài)性泄隔。

2.方法的覆蓋(override)。子類可以覆蓋父類的方法宛徊,因此同樣的方法會(huì)在父類與子類中有著不同的表現(xiàn)形式佛嬉。在java語言中,基類的引用變量不僅可以指向基類的實(shí)例對(duì)象闸天,也可以指向其子類的實(shí)例對(duì)象暖呕。同樣,接口的引用變量也可以指向其實(shí)現(xiàn)類的實(shí)例對(duì)象苞氮。而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定(綁定指的是將一個(gè)方法調(diào)用和一個(gè)方法主體連接到一起)湾揽,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法笼吟,而不是引用變量的類型中定義的方法库物。通過這張動(dòng)態(tài)綁定的方法實(shí)現(xiàn)了多態(tài)。由于只有在運(yùn)行時(shí)才能確定調(diào)用哪個(gè)方法贷帮,戚揭,因此通過方法覆蓋實(shí)現(xiàn)的多態(tài)也可以稱為運(yùn)行時(shí)多態(tài),示例如下:

public class Test{
    public static void main(String[] args){
        Base b = new Derived();
        b.f();
        b.g();
    }
}

class Base {
    public Base(){ 
        g(); 
    }
    public void f(){
        System.out.println("Base f()");
    }
    public void g(){
        System.out.println("Base g()");
    }
}

class Derived extends Base{
    public void f(){
        System.out.println("Derived f()");
    }
    public void g(){
        System.out.println("Derived g()");
    }
}

運(yùn)行結(jié)果為:

Derived g()
Derived f()
Derived g()

在上例中,子類Derived的f()方法和g()方法會(huì)覆蓋父類Base的f()方法和g()方法撵枢。在執(zhí)行Base b = new Derived()語句時(shí)民晒,對(duì)象b雖然被聲明為Base,但是對(duì)象b的引用為Derived的一個(gè)實(shí)例化對(duì)象锄禽。即對(duì)象b存儲(chǔ)在棧內(nèi)存潜必,對(duì)象b的引用存儲(chǔ)在堆內(nèi)存,其在棧內(nèi)存中存儲(chǔ)的值為堆內(nèi)存的地址沃但,訪問對(duì)象b即訪問一個(gè)實(shí)例化的Derived對(duì)象刮便。Derived實(shí)例化時(shí)會(huì)默認(rèn)調(diào)用父類Base的無參構(gòu)造方法,此構(gòu)造方法會(huì)調(diào)用子類的g()方法绽慈,而非父類的g()方法恨旱,因此會(huì)輸出Derived g()辈毯。由于實(shí)際創(chuàng)建的是Derived類的對(duì)象,后面的方法調(diào)用都會(huì)調(diào)用子類Derived的方法搜贤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谆沃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仪芒,更是在濱河造成了極大的恐慌唁影,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掂名,死亡現(xiàn)場(chǎng)離奇詭異据沈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)饺蔑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門锌介,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猾警,你說我怎么就攤上這事孔祸。” “怎么了发皿?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵崔慧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我穴墅,道長(zhǎng)惶室,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任玄货,我火速辦了婚禮皇钞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘誉结。我一直安慰自己鹅士,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布惩坑。 她就那樣靜靜地躺著掉盅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪以舒。 梳的紋絲不亂的頭發(fā)上趾痘,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音蔓钟,去河邊找鬼永票。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侣集。 我是一名探鬼主播键俱,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼世分!你這毒婦竟也來了编振?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤臭埋,失蹤者是張志新(化名)和其女友劉穎踪央,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓢阴,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畅蹂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荣恐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片液斜。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖募胃,靈堂內(nèi)的尸體忽然破棺而出旗唁,到底是詐尸還是另有隱情畦浓,我是刑警寧澤痹束,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站讶请,受9級(jí)特大地震影響祷嘶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夺溢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一论巍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧风响,春花似錦嘉汰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至持搜,卻和暖如春密似,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葫盼。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工残腌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓抛猫,卻偏偏與公主長(zhǎng)得像蟆盹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闺金,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 多態(tài)前提和體現(xiàn): 有多態(tài)時(shí)的子父類間的成員變量日缨、成員方法、構(gòu)造方法之間的特點(diǎn): 多態(tài)中 成員變量的訪問特點(diǎn):編譯...
    sexyhair閱讀 570評(píng)論 0 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 若有姓顧掖看,雷匣距,陳,王等哎壳,與阿沽家有關(guān)毅待,又不知從那搬到那里的,只知道鎮(zhèn)雄归榕,芒部尸红,白鳥,潑機(jī)刹泄,顧山外里,張綦屯,化平嶺特石,白...
    近水遠(yuǎn)山GSAG閱讀 309評(píng)論 0 0
  • 席牧臻 金波實(shí)乃杯中物盅蝗,杜康狂藥盡歡伯。 清酌昔酒...
    席牧臻閱讀 415評(píng)論 0 0
  • 前言 開篇要說聲sorry姆蘸,限于各種原因墩莫,Okhttp的下篇和OKIO要delay 了,本周先來一個(gè)簡(jiǎn)單一些的逞敷。 ...
    Jensen95閱讀 992評(píng)論 3 27