java 類的向上向下轉(zhuǎn)換

通俗理解向上轉(zhuǎn)型:就是子類轉(zhuǎn)型成父類棕洋。

  1. class A

  2. {

  3. }

  4. class B extends A

  5. {

  6. }

  7. A a = new B();

這個(gè)就是向上轉(zhuǎn)型。
向上轉(zhuǎn)化后只能調(diào)用父類的方法头岔,

向下轉(zhuǎn)型
A a = new B();
B a1 = (B) a;
只有經(jīng)歷過(guò)向下轉(zhuǎn)型的對(duì)象才能向上轉(zhuǎn)型

附:

子類轉(zhuǎn)型成父類是向上轉(zhuǎn)型,反過(guò)來(lái)說(shuō)鼠证,父類轉(zhuǎn)型成子類就是向下轉(zhuǎn)型峡竣。

但是,向下轉(zhuǎn)型可能會(huì)帶來(lái)一些問(wèn)題:我們可以說(shuō)麻雀是鳥量九,但不能說(shuō)鳥就是麻雀适掰。來(lái)看下面的例子:

A類:

package a.b;

public class A {

void aMthod() {

   System.out.println("A method");

}

}

A的子類B:

package a.b;

public class B extends A {

void bMethod1() {

   System.out.println("B method 1");

}

void bMethod2() {

   System.out.println("B method 2");

}

}

C類:

package a.b;

public class C {

 public static void main(String[] args) {

        A a1 = new B(); // 向上轉(zhuǎn)型

        a1.aMthod();    // 調(diào)用父類aMthod(),a1遺失B類方法bMethod1()荠列、bMethod2()

        B b1 = (B) a1; // 向下轉(zhuǎn)型类浪,編譯無(wú)錯(cuò)誤,運(yùn)行時(shí)無(wú)錯(cuò)誤

        b1.aMthod();    // 調(diào)用父類A方法

        b1.bMethod1(); // 調(diào)用B類方法

        b1.bMethod2(); // 調(diào)用B類方法

        A a2 = new A();

        B b2 = (B) a2; // 向下轉(zhuǎn)型肌似,編譯無(wú)錯(cuò)誤费就,運(yùn)行時(shí)將出錯(cuò)

        b2.aMthod();

        b2.bMethod1();

        b2.bMethod2();

 }

}

從上面的代碼我們可以得出這樣一個(gè)結(jié)論:向下轉(zhuǎn)型需要使用強(qiáng)制轉(zhuǎn)換。運(yùn)行C程序川队,控制臺(tái)將輸出:

Exception in thread "main" java.lang.ClassCastException: a.b.A cannot be cast to a.b.B at
a.b.C.main(C.java:14)

A method

A method

B method 1

B method 2

其實(shí)黑體部分的向下轉(zhuǎn)型代碼后的注釋已經(jīng)提示你將發(fā)生運(yùn)行時(shí)錯(cuò)誤力细。為什么前一句向下轉(zhuǎn)型代碼可以,而后一句代碼卻出錯(cuò)固额?這是因?yàn)閍1指向一個(gè)子類B的對(duì)象眠蚂,所以子類B的實(shí)例對(duì)象b1當(dāng)然也可以指向a1。而a2是一個(gè)父類對(duì)象斗躏,子類對(duì)象b2不能指向父類對(duì)象a2逝慧。那么如何避免在執(zhí)行向下轉(zhuǎn)型時(shí)發(fā)生運(yùn)行時(shí)ClassCastException異常?使用5.7.7節(jié)學(xué)過(guò)的instanceof就可以了瑟捣。我們修改一下C類的代碼:

A a2 = new A();

if (a2 instanceof B) {

B b2 = (B) a2;

b2.aMthod();

b2.bMethod1();

b2.bMethod2();

}

這樣處理后馋艺,就不用擔(dān)心類型轉(zhuǎn)換時(shí)發(fā)生ClassCastException異常了

From 20180110 廣州

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市迈套,隨后出現(xiàn)的幾起案子捐祠,更是在濱河造成了極大的恐慌,老刑警劉巖桑李,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踱蛀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡贵白,警方通過(guò)查閱死者的電腦和手機(jī)率拒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)禁荒,“玉大人猬膨,你說(shuō)我怎么就攤上這事∏喊椋” “怎么了勃痴?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵谒所,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我沛申,道長(zhǎng)劣领,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任铁材,我火速辦了婚禮尖淘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘著觉。我一直安慰自己村生,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布固惯。 她就那樣靜靜地躺著梆造,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葬毫。 梳的紋絲不亂的頭發(fā)上镇辉,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音贴捡,去河邊找鬼忽肛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛烂斋,可吹牛的內(nèi)容都是我干的屹逛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼汛骂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼罕模!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起帘瞭,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤淑掌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蝶念,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抛腕,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年媒殉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了担敌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡廷蓉,死狀恐怖全封,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤刹悴,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布给猾,位于F島的核電站,受9級(jí)特大地震影響颂跨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扯饶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一恒削、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尾序,春花似錦钓丰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至兰怠,卻和暖如春梦鉴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揭保。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工肥橙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秸侣。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓存筏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親味榛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子椭坚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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

  • 我們?cè)诂F(xiàn)實(shí)中常常這樣說(shuō):這個(gè)人會(huì)唱歌。在這里搏色,我們并不關(guān)心這個(gè)人是黑人還是白人善茎,是成人還是小孩,也就是說(shuō)我們更傾向...
    木有魚丸啦閱讀 199評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法继榆,類相關(guān)的語(yǔ)法巾表,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法略吨,異常的語(yǔ)法集币,線程的語(yǔ)...
    子非魚_t_閱讀 31,631評(píng)論 18 399
  • Win7下如何打開DOS控制臺(tái)? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,599評(píng)論 4 12
  • 開始的時(shí)候翠忠,總是不理解鞠苟,為什么Java中要有轉(zhuǎn)型這一概念。但是隨著面向?qū)ο笏枷氲募由睿约皩?duì)Java的理解深入当娱。才...
    樂百事52淑熙閱讀 386評(píng)論 0 2
  • 大多數(shù)人都會(huì)輕易地夸贊別人跨细,可他們中的大部分人都不曾想到——一句風(fēng)輕云淡鹦倚、張口就來(lái)的贊美會(huì)成為別人的負(fù)擔(dān)! ...
    蝸牛_e88d閱讀 358評(píng)論 0 1