Java-黑蝙蝠  
          My name is mozart0
          外表澀苦但留醇香于舌尖
          online
          Adult Dating
          公告
          • 多一份自信,多一份成功!
            多看一本書,多一份機遇!
            多一次微笑,多一份快樂!
          日歷
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567
          統計
          • 隨筆 - 10
          • 文章 - 0
          • 評論 - 32
          • 引用 - 0

          導航

          常用鏈接

          留言簿(6)

          隨筆分類(10)

          隨筆檔案(10)

          相冊

          天氣預報

          常去論壇

          搜索

          •  

          積分與排名

          • 積分 - 38634
          • 排名 - 1192

          最新評論

          閱讀排行榜

          評論排行榜

           

          ??????? 炎熱的夏天,玩了大半個月,心里滿愧疚的,所以打算不在放縱自己,認真地學習java。
          這次復習了java的面向對象機制,主要內容有強制轉型(casting)和自動轉型(promotion),以及覆蓋(override)的2中區別,變量覆蓋和方法覆蓋。下面看例子啊:

          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());
          ????????
          // 這里調用的依然是父類的方法,返回為red,因為子類中并未改寫該方法,雖然它遮蔽了color變量
          ????????
          // 如果把BlackBat?中getColor()?的注釋去掉?就會顯示的是Black
          ????????
          ????????
          // ?tiger中?實現和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());
          ????????
          // 和方法不同的是:強制轉換可訪問父類的變量
          ????????((Bat)y).sayHi(); // 這里雖然強制轉換為父類?但是還是調用的子類的。強制轉換也不能訪問

          ????????Bat?z?
          = ? new ?BlackBat(); // 自動轉型?子類轉換為超類????
          ????????
          // z.getName(); // 子類中雖然有這個方法?但是轉型為超類后?超類中并沒這個方法?cannot?find?symbol
          ????
          ????????((BlackBat)z).getName();
          ????????
          // 這樣就對了,強制轉換為子類,這種轉換通常成為窄轉換,即父類向子類的轉換。
          ????????
          ????????z.sayHi();
          // 因為超類中的方法被改寫?所以調用的也是子類的方法
          ????????z.sayWhat(); // 超類中的方法未被改寫?所以還是調用超類中的方法
          ????}

          }

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


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

          posted on 2006-07-24 18:31 黑蝙蝠 閱讀(677) 評論(1)  編輯  收藏 所屬分類: J2SE(基礎)
          評論:
           
          Copyright © 黑蝙蝠 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 朔州市| 同心县| 三河市| 沁源县| 黄大仙区| 沅陵县| 古丈县| 玛曲县| 平和县| 万源市| 城口县| 达日县| 拉萨市| 岳普湖县| 延吉市| 平利县| 泸州市| 普格县| 黄冈市| 太原市| 巧家县| 松阳县| 津南区| 五华县| 广平县| 饶河县| 保德县| 临海市| 吴旗县| 正宁县| 新建县| 高要市| 景宁| 卢湾区| 兖州市| 齐齐哈尔市| 阿巴嘎旗| 杭州市| 张家港市| 长春市| 中阳县|