Java-黑蝙蝠  
          My name is mozart0
          外表澀苦但留醇香于舌尖
          online
          Adult Dating
          公告
          • 多一份自信,多一份成功!
            多看一本書,多一份機(jī)遇!
            多一次微笑,多一份快樂!
          日歷
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789
          統(tǒng)計(jì)
          • 隨筆 - 10
          • 文章 - 0
          • 評論 - 32
          • 引用 - 0

          導(dǎo)航

          常用鏈接

          留言簿(6)

          隨筆分類(10)

          隨筆檔案(10)

          相冊

          天氣預(yù)報(bào)

          常去論壇

          搜索

          •  

          積分與排名

          • 積分 - 38761
          • 排名 - 1193

          最新評論

          閱讀排行榜

          評論排行榜

           

          ??????? 炎熱的夏天,玩了大半個月,心里滿愧疚的,所以打算不在放縱自己,認(rèn)真地學(xué)習(xí)java。
          這次復(fù)習(xí)了java的面向?qū)ο髾C(jī)制,主要內(nèi)容有強(qiáng)制轉(zhuǎn)型(casting)和自動轉(zhuǎn)型(promotion),以及覆蓋(override)的2中區(qū)別,變量覆蓋和方法覆蓋。下面看例子啊:

          import ? static ?java.lang.System. * ;

          class ?Bat {
          ????
          int ?wing;
          ????
          private ?String?color;

          ????
          public ?Bat() {
          ????????wing?
          = ? 2 ?;
          ????????color?
          = ? " red " ;
          ????}


          ????
          public ? void ?sayHi() {
          ????????System.out.println(
          " Hi?,Bat?you?have " + wing + " ?wings " );
          ????}


          ????
          public ? void ?sayWhat() {
          ????????System.out.println(
          " What?will?i?say? " );
          ????}


          ????
          public ?String?getColor() {
          ????????
          return ?color;
          ????}


          }


          class ?BlackBat? extends ?Bat {
          ????
          ????
          int ?wing; // 遮蔽了超類中的2個變量
          ???? private ?String?color;

          ????
          public ?BlackBat() {
          ????????wing?
          = ? 4 ;
          ????????color?
          = ? " Black " ;
          ????}
          ????
          ????????
          ????
          public ? void ?sayHi() {
          ????????System.out.println(
          " Hi?,Bat?you?have?4?wings " + wing);
          ????}
          ????

          ????
          public ? void ?getName() {
          ????????System.out.println(
          " My?Name?is?BlackBat " );
          ????????
          ????}


          ????
          // ?去掉前面的注釋符號?那么就改寫了父類的方法?返回的是自己的顏色?即Black
          ????
          // public?String?getColor(){
          ????
          // ????return?color;
          ????
          // }

          }


          public ? class ?TestAB {
          ????
          public ? static ? void ?main(String[]?args)? {
          ????????Bat?x?
          = ? new ?Bat();
          ????????BlackBat?y?
          = ? new ?BlackBat();
          ????????x.sayHi();
          ????????y.sayHi();

          ????????System.out.println(
          " I'm?Bat?,my?color?is? " + x.getColor());
          ????????System.out.println(
          " I'm?BlackBat?,my?color?is? " + y.getColor());
          ????????
          // 這里調(diào)用的依然是父類的方法,返回為red,因?yàn)樽宇愔胁⑽锤膶懺摲椒ǎm然它遮蔽了color變量
          ????????
          // 如果把BlackBat?中g(shù)etColor()?的注釋去掉?就會顯示的是Black
          ????????
          ????????
          // ?tiger中?實(shí)現(xiàn)和c語言類似的輸出語句。
          ????????out.printf( " I'm?BlackBat?,?my?color?is?%s?.%n " ,y.getColor());

          ????????System.out.println(
          " Yes?,?I?am?from?super " + ((Bat)y).wing + x.getColor());
          ????????
          // 和方法不同的是:強(qiáng)制轉(zhuǎn)換可訪問父類的變量
          ????????((Bat)y).sayHi(); // 這里雖然強(qiáng)制轉(zhuǎn)換為父類?但是還是調(diào)用的子類的。強(qiáng)制轉(zhuǎn)換也不能訪問

          ????????Bat?z?
          = ? new ?BlackBat(); // 自動轉(zhuǎn)型?子類轉(zhuǎn)換為超類????
          ????????
          // z.getName(); // 子類中雖然有這個方法?但是轉(zhuǎn)型為超類后?超類中并沒這個方法?cannot?find?symbol
          ????
          ????????((BlackBat)z).getName();
          ????????
          // 這樣就對了,強(qiáng)制轉(zhuǎn)換為子類,這種轉(zhuǎn)換通常成為窄轉(zhuǎn)換,即父類向子類的轉(zhuǎn)換。
          ????????
          ????????z.sayHi();
          // 因?yàn)槌愔械姆椒ū桓膶?所以調(diào)用的也是子類的方法
          ????????z.sayWhat(); // 超類中的方法未被改寫?所以還是調(diào)用超類中的方法
          ????}

          }

          總結(jié):子類向父類類型的轉(zhuǎn)換屬于 自動類型轉(zhuǎn)換
          ??????????? 父類向子類類型的轉(zhuǎn)換屬于 強(qiáng)制類型轉(zhuǎn)換
          ????????????覆蓋:分為變量覆蓋和方法覆蓋,如果父類變量被覆蓋后,可通過強(qiáng)制轉(zhuǎn)換成父類來訪問父類的變量,還可通過super.變量名來訪問。而父類的方法被覆蓋后,只能通過super.方法名()來訪問,不能像變量那樣通過強(qiáng)制轉(zhuǎn)換來訪問父類的方法。


          @ Author 黑蝙蝠
          http://www.aygfsteel.com/blackbat

          posted on 2006-07-24 18:31 黑蝙蝠 閱讀(692) 評論(1)  編輯  收藏 所屬分類: J2SE(基礎(chǔ))
          評論:
           
          Copyright © 黑蝙蝠 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 桂阳县| 宁德市| 唐河县| 博爱县| 桐柏县| 丰县| 阜城县| 广灵县| 富裕县| 平乐县| 康保县| 北安市| 上犹县| 昭觉县| 尉犁县| 会宁县| 闽清县| 霍山县| 富阳市| 汶上县| 都昌县| 建宁县| 滁州市| 石林| 天峻县| 龙川县| 文登市| 通榆县| 曲靖市| 安图县| 宜川县| 桐乡市| 佛学| 通许县| 丹凤县| 凤山市| 临武县| 武川县| 灵山县| 江川县| 黄大仙区|