国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

強(qiáng)制類型轉(zhuǎn)換

2019-11-11 01:32:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

java中強(qiáng)制類型轉(zhuǎn)換分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型兩種,這里我們討論的后者,也就是引用數(shù)據(jù)類型的強(qiáng)制類型轉(zhuǎn)換。

       在Java中由于繼承和向上轉(zhuǎn)型,子類可以非常自然地轉(zhuǎn)換成父類,但是父類轉(zhuǎn)換成子類則需要強(qiáng)制轉(zhuǎn)換。因?yàn)樽宇悡碛斜雀割惛嗟膶傩浴⒏鼜?qiáng)的功能,所以父類轉(zhuǎn)換為子類需要強(qiáng)制。那么,是不是只要是父類轉(zhuǎn)換為子類就會(huì)成功呢?其實(shí)不然,他們之間的強(qiáng)制類型轉(zhuǎn)換是有條件的。

       當(dāng)我們用一個(gè)類型的構(gòu)造器構(gòu)造出一個(gè)對(duì)象時(shí),這個(gè)對(duì)象的類型就已經(jīng)確定的,也就說(shuō)它的本質(zhì)是不會(huì)再發(fā)生變化了。在Java中我們可以通過(guò)繼承、向上轉(zhuǎn)型的關(guān)系使用父類類型來(lái)引用它,這個(gè)時(shí)候我們是使用功能較弱的類型引用功能較強(qiáng)的對(duì)象,這是可行的。但是將功能較弱的類型強(qiáng)制轉(zhuǎn)功能較強(qiáng)的對(duì)象時(shí),就不一定可以行了。

       舉個(gè)例子來(lái)說(shuō)明。比如系統(tǒng)中存在Father、Son兩個(gè)對(duì)象。首先我們先構(gòu)造一個(gè)Son對(duì)象,然后用一個(gè)Father類型變量引用它:

       Father father = new Son();

       在這里Son 對(duì)象實(shí)例被向上轉(zhuǎn)型為father了,但是請(qǐng)注意這個(gè)Son對(duì)象實(shí)例在內(nèi)存中的本質(zhì)還是Son類型的,只不過(guò)它的能力臨時(shí)被消弱了而已,如果我們想變強(qiáng)怎么辦?將其對(duì)象類型還原!

       Son son = (Son)father;

       這條語(yǔ)句是可行的,其實(shí)father引用仍然是Father類型的,只不過(guò)是將它的能力加強(qiáng)了,將其加強(qiáng)后轉(zhuǎn)交給son引用了,Son對(duì)象實(shí)例在son的變量的引用下,恢復(fù)真身,可以使用全部功能了。

       前面提到父類強(qiáng)制轉(zhuǎn)換成子類并不是總是成功,那么在什么情況下它會(huì)失效呢?

       當(dāng)引用類型的真實(shí)身份是父類本身的類型時(shí),強(qiáng)制類型轉(zhuǎn)換就會(huì)產(chǎn)生錯(cuò)誤。例如:

       Father father = new Father();

       Son son = (Son) father;

       這個(gè)系統(tǒng)會(huì)拋出ClassCastException異常信息。

    所以編譯器在編譯時(shí)只會(huì)檢查類型之間是否存在繼承關(guān)系,有則通過(guò);而在運(yùn)行時(shí)就會(huì)檢查它的真實(shí)類型,是則通過(guò),否則拋出ClassCastException異常。

   所以在繼承中,子類可以自動(dòng)轉(zhuǎn)型為父類,但是父類強(qiáng)制轉(zhuǎn)換為子類時(shí)只有當(dāng)引用類型真正的身份為子類時(shí)才會(huì)強(qiáng)制轉(zhuǎn)換成功,否則失敗。


上一篇:實(shí)現(xiàn)多重繼承

下一篇:JDBC

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新巴尔虎右旗| 福泉市| 吴忠市| 漯河市| 宣城市| 崇礼县| 郓城县| 临沭县| 鄂州市| 睢宁县| 长治市| 普安县| 静海县| 财经| 工布江达县| 广元市| 曲阳县| 安义县| 襄城县| 克东县| 志丹县| 浦北县| 武城县| 崇左市| 孝义市| 达州市| 正蓝旗| 南岸区| 阜康市| 津市市| 云南省| 贵阳市| 商洛市| 拉孜县| 房产| 城固县| 昌平区| 邛崃市| 阳西县| 馆陶县| 华阴市|