Java引用類型有兩個(gè)類型:一個(gè)是編譯時(shí)類型,另一個(gè)是運(yùn)行時(shí)類型。編譯時(shí)類型由聲明該變量時(shí)使用的類型,運(yùn)行時(shí)類型有實(shí)際賦給該變量的對(duì)象決定。如果編譯時(shí)類型和運(yùn)行時(shí)類型不一致,就可能出現(xiàn)所謂多態(tài)。
public class BaseClass { public int book = 6; public void base() { System.out.println("父類中的普通方法"); } public void text() { System.out.println("父類中被覆蓋的方法"); } }
public class subClass extends BaseClass{ public String book ="java"; public void text() { System.out.println("子類中覆蓋父類的方法"); } public void sub() { System.out.println("子類中的普通方法"); } public static void main(String[] args) { //下面編譯時(shí)類型和運(yùn)行時(shí)類型完全一樣,所以不存在多態(tài) BaseClass bc = new BaseClass(); System.out.println(bc.book); //下面兩次調(diào)用的是BaseClass的方法 bc.text(); bc.base(); subClass sc = new subClass(); System.out.println(sc.book); //下面調(diào)用的是subClass類的方法 sc.sub(); sc.text(); //下面編譯時(shí)類型與運(yùn)行時(shí)類型是不一樣的,就是所謂的多態(tài) BaseClass bs = new subClass(); System.out.println(bs.book); bs.text(); bs.base(); //bs.sub(); //bs是父類的類型,他訪問(wèn)的是父類的shi'li'bian'liang } }
上面程序的main()方法中創(chuàng)造了三個(gè)變量,前兩個(gè)引用變量,他們的編譯時(shí)類型和運(yùn)行時(shí)類型完全相同,因此調(diào)用他們的成員變量和 成員方法非常正常,但是第三個(gè)變量的編譯時(shí)類型和運(yùn)行時(shí)類型不一致,當(dāng)調(diào)用這個(gè)引用變量的text方法是,父類中定義了該方法,子類中將這個(gè)方法覆蓋掉,實(shí)際執(zhí)行的方法是子類中覆蓋掉父類的方法。
Java允許將一個(gè)子類對(duì)象直接賦給一個(gè)父類的引用變量,無(wú)需任何的類型轉(zhuǎn)換,或者被稱為向上轉(zhuǎn)型,向上轉(zhuǎn)型有系統(tǒng)自動(dòng)完成。
當(dāng)運(yùn)行時(shí)調(diào)用該引用變量的方法時(shí),其方法行為總是表現(xiàn)出子類的行為特征,而不是父類的行為特征,這就可能出現(xiàn):相同類型的變量‘調(diào)用同一個(gè)方法是呈現(xiàn)出不同的行為特征,而不是父類的行為特征,這就是多態(tài)。
與方法不同的是,對(duì)象的實(shí)例變量則不具備多態(tài)性。
結(jié)果: 6 父類中被覆蓋的方法 父類中的普通方法 java 子類中的普通方法 子類中覆蓋父類的方法 6 子類中覆蓋父類的方法 父類中的普通方法
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
標(biāo)書對(duì)比王是一款標(biāo)書查重工具,支持多份投標(biāo)文件兩兩相互比對(duì),重復(fù)內(nèi)容高亮標(biāo)記,可快速定位重復(fù)內(nèi)容原文所在位置,并可導(dǎo)出比對(duì)報(bào)告。
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
以上就是對(duì)于Java中多態(tài)的補(bǔ)充的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
java怎么學(xué)習(xí)?java怎么入門?java在哪學(xué)?java怎么學(xué)才快?不用擔(dān)心,這里為大家提供了java速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)