多態(tài)的基礎(chǔ)語(yǔ)法

多態(tài)的基礎(chǔ)語(yǔ)法

3.1、向上轉(zhuǎn)型和向下轉(zhuǎn)型的概念。

向上轉(zhuǎn)型:子--->父 (upcasting)

又被稱(chēng)為自動(dòng)類(lèi)型轉(zhuǎn)換:Animal a = new Cat();

向下轉(zhuǎn)型:父--->子 (downcasting)

又被稱(chēng)為強(qiáng)制類(lèi)型轉(zhuǎn)換:Cat c = (Cat)a; 需要添加強(qiáng)制類(lèi)型轉(zhuǎn)換符。

什么時(shí)候需要向下轉(zhuǎn)型?

需要調(diào)用或者執(zhí)行子類(lèi)對(duì)象中特有的方法。

必須進(jìn)行向下轉(zhuǎn)型,才可以調(diào)用。

向下轉(zhuǎn)型有風(fēng)險(xiǎn)嗎?

容易出現(xiàn)ClassCastException(類(lèi)型轉(zhuǎn)換異常)

怎么避免這個(gè)風(fēng)險(xiǎn)?

instanceof運(yùn)算符,可以在程序運(yùn)行階段動(dòng)態(tài)的判斷某個(gè)引用指向的對(duì)象

是否為某一種類(lèi)型。

養(yǎng)成好習(xí)慣,向下轉(zhuǎn)型之前一定要使用instanceof運(yùn)算符進(jìn)行判斷。

不管是向上轉(zhuǎn)型還是向下轉(zhuǎn)型,首先他們之間必須有繼承關(guān)系,這樣編譯器就不會(huì)報(bào)錯(cuò)。

3.2、什么是多態(tài)。

多種形態(tài),多種狀態(tài),編譯和運(yùn)行有兩個(gè)不同的狀態(tài)。

編譯期叫做靜態(tài)綁定。

運(yùn)行期叫做動(dòng)態(tài)綁定。

Animal a = new Cat();

// 編譯的時(shí)候編譯器發(fā)現(xiàn)a的類(lèi)型是Animal,所以編譯器會(huì)去Animal類(lèi)中找move()方法

// 找到了,綁定,編譯通過(guò)。但是運(yùn)行的時(shí)候和底層堆內(nèi)存當(dāng)中的實(shí)際對(duì)象有關(guān)

// 真正執(zhí)行的時(shí)候會(huì)自動(dòng)調(diào)用“堆內(nèi)存中真實(shí)對(duì)象”的相關(guān)方法。

a.move();

多態(tài)的典型代碼:父類(lèi)型的引用指向子類(lèi)型的對(duì)象。(java中允許這樣寫(xiě)代碼!?。。?/p>

3.3、什么時(shí)候必須進(jìn)行向下轉(zhuǎn)型?

調(diào)用子類(lèi)對(duì)象上特有的方法時(shí)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容