tory320

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            10 隨筆 :: 0 文章 :: 1 評(píng)論 :: 0 Trackbacks
          <2006年12月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          公告



          自2006年04月12日

          Tory的聯(lián)系方式:
          tanxiuguang123@163.com



          月 [下月] [上月]
          1234567
          891011121314
          15161718192021
          22232425262728
          2930

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

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇

          重載overloading和覆寫overriding哪個(gè)更早執(zhí)行--?? visitor幫助篇
          一:?jiǎn)栴}提出
          雖然我們經(jīng)常寫程序用到重載和覆寫,但是很少會(huì)考慮他們的執(zhí)行順序。下邊的內(nèi)容就是關(guān)于,他們同時(shí)出現(xiàn)時(shí)
          哪個(gè)先起作用:
          二:?jiǎn)栴}分析
          Java是"動(dòng)態(tài)單分派靜態(tài)多分派語(yǔ)言",這個(gè)定義已經(jīng)多次提起,如果你不了解這些概念,看這里"visitor模式準(zhǔn)備"
          所以就注定了重載(靜態(tài)多分派)要早于覆寫(動(dòng)態(tài)單分派),因?yàn)殪o態(tài)分派是編繹期實(shí)現(xiàn)的,動(dòng)態(tài)分派是執(zhí)行期實(shí)現(xiàn)的。
          三:驗(yàn)證
          簡(jiǎn)單驗(yàn)證一下,順變提高記憶

          ?1 public ? class ?Parent? {
          ?2 ???? public ? void ?run(Object?o) {
          ?3 ????????System.out.println( " in?Parent?+param:object " );
          ?4 ????}

          ?5 ???? public ? void ?run( int ?i) {
          ?6 ????????System.out.println( " in?Parent?+?param:int " );
          ?7 ????}

          ?8 }

          ?9
          10 public ? class ?Child? extends ?Parent? {
          11
          12 ???? public ? void ?run(Object?o) {
          13 ????????System.out.println( " in?Child?+param:Object " );
          14 ????}

          15 ???? public ? void ?run(String?str) {
          16 ????????System.out.println( " in?Child?+?param:String " );
          17 ????}

          18 ???? public ? static ? void ?main(String[]?args)? {
          19 ????????Parent?p? = ? new ?Child();
          20 ????????String?str? = ? new ?String();
          21 ????????p.run(str);
          22 ????}

          23 }


          運(yùn)行結(jié)果是什么?
          in Child +param:Object
          inChild是確認(rèn)的,但是為什么是object,而不是String,我們放入的就是String啊。
          首先來分析執(zhí)行過程。
          定義韋類型Parent p在執(zhí)行run(Str)的時(shí)候,

          1,如果是先執(zhí)行重載,然後是執(zhí)行覆寫的過程
          重載時(shí)因?yàn)檎也坏綄?duì)應(yīng)的String參數(shù)的函數(shù),所以定位到接受父類的run(Object o)函數(shù),
          覆寫時(shí)因?yàn)閭魅霑r(shí)父類告訴子類的對(duì)象類型是Object,所以執(zhí)行run(Object o);
          正是我們看到的結(jié)果,所以在Java中執(zhí)行的順序是這樣的。

          2,為了對(duì)比,說一下先覆寫后重載的過程
          如果是先覆寫,再重載
          覆寫時(shí)因?yàn)榇_定對(duì)象實(shí)際是子類,所以直接覆寫到Child,然後重載,發(fā)現(xiàn)有對(duì)應(yīng)的String為參數(shù)的函數(shù)
          執(zhí)行,run(String str);
          應(yīng)該輸出的結(jié)果:in Child +param:String
          但我們看到結(jié)果顯然是1,所以驗(yàn)證了Java是先重載后覆寫的。


          最后的部分:

          看完本文,如果你對(duì)visitor模式有更多的興趣,想了解更多請(qǐng)看如下幾篇文章。
          1,靜態(tài)分派,動(dòng)態(tài)分派,多分派,單分派 --------------?? visitor模式準(zhǔn)備
          2,訪問差異類型的集合類 ------------------------?? visitor模式入門
          3,visitor模式理論及學(xué)術(shù)概念-------------------?? visitor模式深入
          4,visitor模式和其它模式的比較和關(guān)系-------------?? visitor模式總結(jié)?
          5,重載overloading和覆寫overriding哪個(gè)更早執(zhí)行--?? visitor幫助篇 (本文)
          雖然排列順序是1,2,3,4,5 但是我個(gè)人建議的學(xué)習(xí)方式是2,1,3,4,5因?yàn)檫@個(gè)順序更方便一般人理解

          posted on 2006-12-18 22:38 tory 閱讀(249) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 汉寿县| 喀喇| 额尔古纳市| 乌审旗| 亚东县| 漯河市| 高清| 张掖市| 六安市| 江永县| 桐梓县| 镇康县| 泽库县| 天津市| 常山县| 平湖市| 马鞍山市| 武平县| 漳平市| 天津市| 吉首市| 无为县| 健康| 越西县| 洮南市| 晋宁县| 杨浦区| 贵南县| 偃师市| 兴安县| 浮山县| 南充市| 大厂| 勃利县| 万州区| 凌海市| 咸丰县| 天全县| 乃东县| 鲁甸县| 金阳县|