<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    DANCE WITH JAVA

    開發(fā)出高質(zhì)量的系統(tǒng)

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    好友之家

    最新評(píng)論

    重載overloading和覆寫overriding哪個(gè)更早起作用-- visitor幫助篇

    接受建議,改一下標(biāo)題.例子不太恰當(dāng),我刪除了。換成了回文中的例子。
    重載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)證
    見這里

    最后的部分:

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

    posted on 2006-12-18 20:20 dreamstone 閱讀(3834) 評(píng)論(18)  編輯  收藏 所屬分類: jdk相關(guān)

    評(píng)論

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-19 15:42 云靜心舞

    .....字這么大....  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-19 18:11 圣川

    我感覺不是這樣的
    因?yàn)槟闶沁@樣定義的
    Parent p = new Child();

    這樣p其實(shí)并不知道它的子類有個(gè) run(String)方法,這種現(xiàn)象在繼承中叫切割現(xiàn)象,所以p會(huì)調(diào)用自己的run(Object)方法,之所以會(huì)是子類的結(jié)果是因?yàn)檫@個(gè)時(shí)候發(fā)生了一個(gè)向下轉(zhuǎn)型而已。如果你換成Child p = new Child()就是另一個(gè)結(jié)果了。
      回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-19 21:59 dreamstone

    to 圣川:
    如果是Child p = new Child()就沒有區(qū)別了,因?yàn)檫@樣無(wú)論怎么執(zhí)行結(jié)果是一樣的。
    不過(guò)仔細(xì)想想我的例子可能并不恰當(dāng),例子展示的好像是向下轉(zhuǎn)型和重載哪個(gè)發(fā)生更早些。不過(guò)這個(gè)說(shuō)法應(yīng)該是對(duì)的,因?yàn)橹剌d是編譯器確定的.  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-19 22:04 gg_shily

    @圣川
    對(duì),Parent p = new Child(); 這樣定義以后,p只能調(diào)用Parent的run方法和Child overriding 后的run方法,你如果調(diào)用Child overloading后的方法必須要向下轉(zhuǎn)型,也就是說(shuō)你的Parent類里如果沒有run(Object)這個(gè)方法,你的這條語(yǔ)句:p.run(str); 也是不能調(diào)用的
      回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-19 22:11 gg_shily

    我覺得重載和重構(gòu)本身就是兩個(gè)不相干的事情,不會(huì)存在那個(gè)更早執(zhí)行的問題,因?yàn)樗麄儍蓚€(gè)是不會(huì)重復(fù)的,你的方法要么是重載要么是重構(gòu),怎么會(huì)有個(gè)方法既是重寫又是重構(gòu)呢?舉個(gè)例子先  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-19 22:44 dreamstone

    to gg_shily :
    現(xiàn)在想來(lái)我的例子可能有些問題,但是重載和覆寫還是可以同時(shí)出現(xiàn)的:
    class Parent {
    public void run(Object o) {
    System.out.println(" in Parent +param:object ");
    }

    public void run(String str) {
    System.out.println(" in Parent + param:int ");
    }
    }

    class Child extends Parent {

    public void run(Object o) {
    System.out.println(" in Child +param:Object ");
    }

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

    public static void main(String[] args) {
    Parent p = new Child();
    String str = new String();
    p.run(str);
    }
    }
    下邊這種情況in Child + param:String 打印出來(lái),必定是經(jīng)歷了一次重載和一次向下轉(zhuǎn)型,沒有向下轉(zhuǎn)型Parent不可能變成child,無(wú)論是在父類還是子類的兩個(gè)函數(shù)中選擇必定就是重載,所以重復(fù)出現(xiàn)是可能的。
    只是這樣就體現(xiàn)不出來(lái)執(zhí)行順序了,所以我改了一個(gè)版本出來(lái),現(xiàn)在向來(lái)但是的更改有寫欠考慮。但是這個(gè)問題肯定是存在的。
      回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-19 23:01 gg_shily

    我覺得你的這兩個(gè)方法都是對(duì)父類方法的overriding 而不是overloading 所以程序發(fā)生了多態(tài)效應(yīng),run(String)方法通過(guò)動(dòng)態(tài)邦定運(yùn)行的是子類的方法,而沒有經(jīng)歷重載  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-19 23:05 gg_shily

    有時(shí)間可以直接交流一下,我的qq:30622882 我晚上一般在但都是隱身  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 00:09 dreamstone

    對(duì)啊,是對(duì)父類的overriding,但是到了子類后就需要overloading了。
    所以你認(rèn)為是先向下轉(zhuǎn)型,然后在子類內(nèi)overloading ?

    我很少用qq,給你發(fā)郵件了,看看收到?jīng)],我發(fā)到gg_shily(AT)163.com了。  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 00:38 dreamstone

    另外我又從另一個(gè)角度看了一下,你看看這個(gè)文章:
    http://m.tkk7.com/dreamstone/archive/2006/12/20/88942.html  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 10:28 daydream

    覺得overload和override是不同的兩回事,不存在哪個(gè)先執(zhí)行的問題。

    overload是在編譯期間根據(jù)變量的聲明類型,在聲明類型中尋找最匹配的方法原型,
    Parent p = new Child();
    p.run("...");
    在編譯期間會(huì)在Parent類中尋找一個(gè)最匹配的方法原型(方法簽名),

    然后運(yùn)行期間,因?yàn)閞un方法在Parent類中不是靜態(tài)的、也不是final的(java中的方法默認(rèn)是override的),所以,會(huì)再根據(jù)實(shí)際的對(duì)象類型,查找從實(shí)際類型到Parent類型之間、所有重寫了同一個(gè)方法簽名的所有方法(這兒查找的是相同的方法簽名),如果找到了,就執(zhí)行子類的方法。  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 10:32 daydream

    補(bǔ)充一下,就是說(shuō),overload和override是兩個(gè)階段的概念。
    在編譯期沒有override的概念,同樣,在運(yùn)行期,也沒有overload的概念。  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 10:49 wolfsquare

    在每個(gè)類中,所有的方法入口偏移編譯后都是已確定的,
    所以無(wú)論你如何overload和overwrite,它的執(zhí)行順序也必是確定的,也就是說(shuō)
    public static void test(Parent p,String str){
    p.run(str);
    }編譯時(shí),已經(jīng)知道了會(huì)最終調(diào)run(Object o) 還是run(String str),但這時(shí)候還不知道是哪個(gè)類的,當(dāng)有overwrite的方法時(shí),會(huì)轉(zhuǎn)向overwrite的方法.
    綜上所述,如果是問執(zhí)行順序的話,LZ的問題就沒有意義.
    如果是問誰(shuí)先確定,則是overload  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 14:30 mu!!

    這里面是兩個(gè)問題
    1,繼承中的切割現(xiàn)象。
    樓上的兄弟也說(shuō)了
    就是說(shuō)子類中的Overload函數(shù),通過(guò)父類的對(duì)象是調(diào)不到的。
    Parent p = new Child();
    定義后,p不可能直接調(diào)到Child中比Parent多出來(lái)的任何方法。

    2,僅僅參數(shù)類型不同,而且是類型不同是發(fā)生在基類和子類之間的Overload的函數(shù)如何被調(diào)用。
    這里的原則就是傳什么,調(diào)什么。
    比如
    Child p = new Child();
    p.run(str); ->出String
    p.run((Object)str); ->出Object

    說(shuō)到底,Override和多態(tài)通過(guò)虛函數(shù)表實(shí)現(xiàn)。
    Overload通過(guò)Name-Marshalling實(shí)現(xiàn)。

    另外,我不是很確定,但你的Vistor好像理解得有點(diǎn)問題。
      回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 14:34 mu!!

    樓上的樓上的說(shuō)得很好,
    編譯完之后,只剩下一個(gè)多態(tài)的問題了。
    重載在編譯完成就沒什么不確定的了。  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 15:39 dreamstone

    to daydream :
    覺得overload和override是不同的兩回事,不存在哪個(gè)先執(zhí)行的問題。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    我并沒有說(shuō)兩個(gè)是一會(huì)事,我只是說(shuō)這兩個(gè)的發(fā)生順序不同。一個(gè)發(fā)生在編譯器,一個(gè)發(fā)生在執(zhí)行期。這個(gè)是我文章 一開始就說(shuō)的。不過(guò)可能我的用詞不太恰當(dāng)。
    應(yīng)該是說(shuō)哪個(gè)最先發(fā)生  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 15:51 dreamstone

    to wolfsquare :
    在文章一開始我就說(shuō)了:
    所以就注定了重載(靜態(tài)多分派)要早于覆寫(動(dòng)態(tài)單分派),因?yàn)殪o態(tài)分派是編繹期實(shí)現(xiàn)的,動(dòng)態(tài)分派是執(zhí)行期實(shí)現(xiàn)的。

    所以我們說(shuō)的是一會(huì)事,不過(guò)我的文章題目有問題,應(yīng)該改成哪個(gè)先起作用,或者先確定。謝謝指正。

    另外其實(shí)很多東西有專業(yè)的術(shù)語(yǔ),我可以直接引用,這樣可以保正確切,并且不出問題,但是這些專業(yè)的術(shù)語(yǔ)經(jīng)常會(huì)造成懂的人懂,不懂的人還是不懂,所以我想盡量用一些簡(jiǎn)單的平常的話來(lái)描述,這是我開始的想法,所以我的所有文章看起來(lái)并不是那么簡(jiǎn)練。在過(guò)程中經(jīng)常會(huì)因?yàn)榭紤]不當(dāng),犯些錯(cuò)誤,讓人誤解,甚至誤導(dǎo)別人,所以謝謝你的指正,我會(huì)在有時(shí)間的時(shí)候修正這些錯(cuò)誤。  回復(fù)  更多評(píng)論   

    # re: 重載overloading和覆寫overriding哪個(gè)更早執(zhí)行-- visitor幫助篇 2006-12-20 15:55 dreamstone

    to mu!! :
    我不知道你說(shuō)的,我對(duì)Vistor好像理解得有點(diǎn)問題。 是指什么地方,
    我這篇文章是為了在使用visitor模式中長(zhǎng)出現(xiàn)的一些問題或者名詞做個(gè)說(shuō)明,并不是講的visitor模式。
    如果你認(rèn)為我對(duì)visitor模式的理解有問題的話,麻煩說(shuō)明什么地方有問題?

    另外你所說(shuō)的切割現(xiàn)象是沒問題的,我也知到,但是我們說(shuō)的不是同一個(gè)東西。

      回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 精品国产麻豆免费网站| 91精品视频在线免费观看| 日韩成人免费aa在线看| 亚洲中文字幕一二三四区苍井空| 中文字幕无码不卡免费视频 | 日韩免费a级毛片无码a∨| 亚洲网址在线观看| 3344免费播放观看视频| 亚洲国产精品综合久久久| 国内精品乱码卡1卡2卡3免费| 亚洲综合色7777情网站777| 最近中文字幕无免费视频| 亚洲欧美日韩中文字幕一区二区三区 | 污视频在线免费观看| 国产成人A人亚洲精品无码| 日韩在线永久免费播放| ww在线观视频免费观看w| 日本黄色动图免费在线观看| 四虎永久在线观看免费网站网址| 亚洲国产最大av| 国产又长又粗又爽免费视频| 日韩电影免费在线观看网址| 亚洲av一综合av一区| 亚洲三级高清免费| 亚洲hairy多毛pics大全| 精品亚洲一区二区三区在线播放 | 久久亚洲精品国产亚洲老地址 | 亚洲av无码无线在线观看 | 亚洲AV永久无码精品成人| 曰批全过程免费视频网址| 久久亚洲精品高潮综合色a片| 国产综合精品久久亚洲| 哒哒哒免费视频观看在线www | 无人视频免费观看免费视频| 亚洲精品成人无限看| 国产成人精品免费视| 色偷偷亚洲男人天堂| 日本在线高清免费爱做网站| 青青视频免费在线| 亚洲成人中文字幕| 国产高清视频在线免费观看|