Java多態(tài)性是Java面向?qū)ο缶幊陶Z(yǔ)言的一個(gè)重要特性,它是指同一個(gè)函數(shù)或方法可以被不同的對(duì)象調(diào)用并產(chǎn)生不同的運(yùn)行結(jié)果。這種特性使得Java編程變得更靈活,使得代碼重用和擴(kuò)展變得更加容易。
Java多態(tài)性主要體現(xiàn)在兩個(gè)方面:靜態(tài)多態(tài)和動(dòng)態(tài)多態(tài)。
靜態(tài)多態(tài)的表現(xiàn)
靜態(tài)多態(tài)是在程序編譯時(shí)就開(kāi)始表現(xiàn)的多態(tài)。靜態(tài)多態(tài)的表現(xiàn)形式是通過(guò)函數(shù)重載實(shí)現(xiàn)的。函數(shù)重載是指在同一個(gè)類中定義兩個(gè)或多個(gè)同名函數(shù),這些同名函數(shù)的參數(shù)列表不同,返回類型可以相同也可以不同。在函數(shù)的調(diào)用中,編譯器根據(jù)參數(shù)的類型、個(gè)數(shù)或順序來(lái)確定具體調(diào)用那個(gè)函數(shù)。
例如,我們定義了兩個(gè)同名的函數(shù)addition,一個(gè)接受兩個(gè)整型參數(shù),一個(gè)接受兩個(gè)double類型參數(shù)。當(dāng)程序調(diào)用addition函數(shù)時(shí),如果傳入兩個(gè)整型參數(shù),程序就調(diào)用第一個(gè)addition函數(shù),如果傳入兩個(gè)double類型參數(shù),程序就調(diào)用第二個(gè)addition函數(shù)。這樣,無(wú)論程序輸入什么數(shù)據(jù),都能得到正確的結(jié)果。
動(dòng)態(tài)多態(tài)的表現(xiàn)
動(dòng)態(tài)多態(tài)是在程序運(yùn)行時(shí)才表現(xiàn)出來(lái)的多態(tài)。動(dòng)態(tài)多態(tài)的表現(xiàn)形式是通過(guò)繼承和方法重寫(xiě)實(shí)現(xiàn)的。方法重寫(xiě)是指在子類中重新定義超類已有的方法,并按照子類特有的需求對(duì)其進(jìn)行修改。重新定義后的方法可以與超類的原有方法具有相同的方法名、參數(shù)列表和返回值類型,也可以擁有不同的方法名、參數(shù)列表和返回值類型。
例如,我們有一個(gè)父類動(dòng)物,有一個(gè)方法叫做run(),它是所有動(dòng)物的運(yùn)動(dòng)方式。我們定義了一個(gè)子類狗,狗的運(yùn)動(dòng)方式肯定和其他動(dòng)物不一樣。于是我們?cè)谧宇惞分兄貙?xiě)了父類動(dòng)物的run()方法,使得狗的運(yùn)動(dòng)方式和其他動(dòng)物不同。在程序運(yùn)行時(shí),當(dāng)調(diào)用動(dòng)物的run()方法時(shí),程序會(huì)根據(jù)對(duì)象的實(shí)際類型來(lái)選擇調(diào)用哪個(gè)版本的run()方法,如果是狗,則調(diào)用重寫(xiě)的run()方法,如果是其他動(dòng)物,則調(diào)用父類的run()方法。這樣,我們就能根據(jù)不同的需求產(chǎn)生不同的運(yùn)行結(jié)果。