向上轉(zhuǎn)型與向下轉(zhuǎn)型

父類引用指向子類對象,則稱為向上轉(zhuǎn)型(upcasting)
子類引用指向父類對象,稱為向下轉(zhuǎn)型(downcasting)如果這個父類對象是子類向上轉(zhuǎn)型而來,則安全,反之不安全末早,避免不安全向下轉(zhuǎn)型的方法是先用isntanceof運(yùn)算符判斷向下轉(zhuǎn)型的對象是不是向下轉(zhuǎn)型的目標(biāo)對象烟馅。
個人助記方法: 將父類對象賦值給子類引用,那么是往下走然磷,那么就是向下轉(zhuǎn)型郑趁;那么反之,將子類對象賦值給父類引用姿搜,那么就是向上走寡润,就是向上轉(zhuǎn)型。

向上轉(zhuǎn)型啥時候都可以舅柜,向下轉(zhuǎn)型對象必須是向上轉(zhuǎn)型的產(chǎn)物梭纹,也就是要想先下轉(zhuǎn)型,你得先向上轉(zhuǎn)型致份,否則你的操作是不安全的变抽。

代碼背景:Father是父類,Son是子類

Father f = new Son();//向上轉(zhuǎn)型
Son s = (Son)f;//安全向下轉(zhuǎn)型

Father f = new Father();//聲明父類
Son s = (Son)f;//不安全向下轉(zhuǎn)型氮块,編譯會過绍载,運(yùn)行會錯

Father f = new Father();//聲明父類
if(f instanceof Son){
    Son s = (Son)f;//安全向下轉(zhuǎn)型,如果f不是Son的實(shí)例滔蝉,那么就不會發(fā)生轉(zhuǎn)型
}

向上轉(zhuǎn)型击儡,丟失了子類個性化方法,要注意持有什么類型的引用蝠引,更要注意類型引用的指向的對象代碼實(shí)現(xiàn)阳谍。
其實(shí)類型轉(zhuǎn)換主要是在父類和子類之間進(jìn)行,如果你要把兄弟類相互轉(zhuǎn)換立肘,那么你也會吃到編譯通過边坤,運(yùn)行報(bào)錯的結(jié)果。
既然說到了向上與向下轉(zhuǎn)型谅年,那么不得不說他們的應(yīng)用場景茧痒,純屬個人愚見,也有參考這位兄臺的文章融蹂,大家可以去拜讀一番旺订。

首先是向上向下轉(zhuǎn)型的使用場景常見的是在集合類中,比如你有一個父類和N個子類超燃,然后你想把這些子類裝進(jìn)一個集合里面区拳,這個時候你肯定不會為每一個子類都去創(chuàng)建一個集合來分別存儲,畢竟這么干會寫很多重復(fù)的代碼意乓,你肯定會用泛型樱调,自然而然的泛型的類型肯定是用父類的類型,因?yàn)槿魏我粋€子類的類型都不能存儲其他兄弟類型,那么在你將各個子類對象塞進(jìn)集合里的時候笆凌,會發(fā)生一個自動向上轉(zhuǎn)型的過程圣猎,意思就是你塞進(jìn)去的每個對象都會由一個父類的引用指向他們,向上轉(zhuǎn)型就丟失了子類特有的方法乞而,那么當(dāng)你從集合里面拿出你的子類實(shí)例送悔,這個時候你的子類其實(shí)根本無法調(diào)用他們作為子類對象的特有的方法,那么有什么辦法可以讓這些子類找回自己特有的方法呢爪模,那就是向下轉(zhuǎn)型了欠啤,這就是基本的向上向下轉(zhuǎn)型的使用場景。如果你有興趣屋灌,可以去看一看Android里面的findViewById這個方法尋找控件之后為什么還要強(qiáng)行向下轉(zhuǎn)型洁段,亦或者你可以去看一看java里面Object類的clone()方法并重寫這個方法,基本上就是這么多了声滥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末眉撵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子落塑,更是在濱河造成了極大的恐慌纽疟,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憾赁,死亡現(xiàn)場離奇詭異污朽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)龙考,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蟆肆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晦款,你說我怎么就攤上這事炎功。” “怎么了缓溅?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵蛇损,是天一觀的道長。 經(jīng)常有香客問我坛怪,道長淤齐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任袜匿,我火速辦了婚禮更啄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘居灯。我一直安慰自己祭务,他們只是感情好内狗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著义锥,像睡著了一般其屏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缨该,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音川背,去河邊找鬼贰拿。 笑死,一個胖子當(dāng)著我的面吹牛熄云,可吹牛的內(nèi)容都是我干的膨更。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼缴允,長吁一口氣:“原來是場噩夢啊……” “哼荚守!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起练般,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤矗漾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后薄料,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敞贡,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年摄职,在試婚紗的時候發(fā)現(xiàn)自己被綠了誊役。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡谷市,死狀恐怖蛔垢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迫悠,我是刑警寧澤鹏漆,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站及皂,受9級特大地震影響甫男,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜验烧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一板驳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碍拆,春花似錦若治、人聲如沸慨蓝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礼烈。三九已至,卻和暖如春婆跑,著一層夾襖步出監(jiān)牢的瞬間此熬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工滑进, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留犀忱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓扶关,卻偏偏與公主長得像阴汇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子节槐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容