如何實(shí)現(xiàn)多態(tài) JAVA中的多態(tài)與重載有什么區(qū)別?
JAVA中的多態(tài)與重載有什么區(qū)別?它們之間的區(qū)別如下:多態(tài)性基于重寫。它是類之間的關(guān)系,發(fā)生在不同的類之間。子類重寫父類的方法。實(shí)現(xiàn)不同的子類,不同的實(shí)現(xiàn)形式。多態(tài)性有三個(gè)條件1:繼承2:重寫(重寫父
JAVA中的多態(tài)與重載有什么區(qū)別?
它們之間的區(qū)別如下:
多態(tài)性基于重寫。它是類之間的關(guān)系,發(fā)生在不同的類之間。子類重寫父類的方法。實(shí)現(xiàn)不同的子類,不同的實(shí)現(xiàn)形式。
多態(tài)性有三個(gè)條件
1:繼承
2:重寫(重寫父類繼承的方法)
3:父類引用指向子類對(duì)象
總之,事物在運(yùn)行過程中有不同的狀態(tài)。
Super*P=new sub()
P->func()//調(diào)用子類的func
如果它不是虛的,P->func將調(diào)用父類的原始函數(shù)。
JAVA的多態(tài)用幾句話能直觀的解釋一下嗎?
多態(tài)性分為編譯時(shí)多態(tài)性和運(yùn)行時(shí)多態(tài)性。
1. 編譯時(shí)多態(tài)性,其實(shí)是方法重載,函數(shù)名相同,但簽名不一樣。值得注意的是,簽名不包括方法的返回值。換句話說,這兩個(gè)方法的函數(shù)名和輸入?yún)?shù)是相同的,但返回值不同。編譯器返回錯(cuò)誤。
2. 運(yùn)行時(shí)多態(tài)性實(shí)際上與繼承和接口實(shí)現(xiàn)有關(guān)。子類可以重寫父類的非最終、非靜態(tài)、非私有方法或?qū)崿F(xiàn)接口方法。JVM如何知道要調(diào)用哪個(gè)子類實(shí)例的對(duì)應(yīng)方法?這就是你問的問題。在Java中,對(duì)象在JVM中有描述元數(shù)據(jù)。對(duì)象頭存儲(chǔ)當(dāng)前實(shí)例的類型信息。在調(diào)用時(shí),JVM可以根據(jù)這個(gè)類型準(zhǔn)確地找出要使用的子類方法。