Java中實現(xiàn)多態(tài)的機制是什么?
多態(tài)是面向?qū)ο蟪绦蛟O(shè)計中代碼重用的一個重要機制,它表示當同一個操作在不同對象時,會有不同的語義,從而會產(chǎn)生不同的結(jié)果,例如:同樣是執(zhí)行“+”操作,“3+4”用來實現(xiàn)正數(shù)相加,而“3”+“4”卻實現(xiàn)了字符串的連接。
java中有兩種多態(tài)機制,分別是編譯時多態(tài)和運行時多態(tài)。編譯時多態(tài)是通過方法重載實現(xiàn)的,運行時多態(tài)是通過方法的覆蓋(子類覆蓋父類方法)實現(xiàn)的。
Java實現(xiàn)多態(tài)有三個必要條件:繼承、重寫、向上轉(zhuǎn)型。
繼承:在多態(tài)中必須存在有繼承關(guān)系的子類和父類。
重寫:子類對父類中某些方法進行重新定義,在調(diào)用這些方法時就會調(diào)用子類的方法。
向上轉(zhuǎn)型:在多態(tài)中需要將子類的引用賦給父類對象,只有這樣該引用才能夠具備技能調(diào)用父類的方法和子類的方法。
只有滿足了上述三個條件,我們才能夠在同一個繼承結(jié)構(gòu)中使用統(tǒng)一的邏輯實現(xiàn)代碼處理不同的對象,從而達到執(zhí)行不同的行為。
在java語言中,多態(tài)主要有以下兩種表現(xiàn)方式:1.方法的重載2.方法的覆蓋。
方法重載是指同一個類中有多個同名的方法,但這些方法有著不同的參數(shù),因此在編譯時就可以確定到底調(diào)用哪個方法,它是一種編譯時多態(tài)。重載可以被看作一個類中的方法多態(tài)性。
方法覆蓋是指子類可以覆蓋父類的方法,因此同樣的方法會在父類與子類中有著不同的表現(xiàn)形式。在java語言中,基類的引用變量不僅可以指向基類的實例對象,也可以指向其子類的實例對象。同樣,接口的引用變量也可以指向其實現(xiàn)的實例對象。
程序調(diào)用的運行方法在運行期間才動態(tài)綁定(綁定指的是將一個方法調(diào)用和一個方法主體連接到一起),就是引用變量所指向的具體實例對象的方法。通過這種動態(tài)綁定的方法實現(xiàn)了多態(tài)。由于只有在運行時才能確定調(diào)用哪個方法,因此通過方法覆蓋實現(xiàn)的多態(tài)也可以被稱為運行時多態(tài)。