欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
重載overloading和覆寫(xiě)overriding哪個(gè)更早起作用-- visitor幫助...

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

接受建議,改一下標題.例子不太恰當,我刪除了。換成了回文中的例子。
重載overloading和覆寫(xiě)overriding哪個(gè)更早執行--   visitor幫助篇
一:?jiǎn)?wèn)題提出
雖然我們經(jīng)常寫(xiě)程序用到重載和覆寫(xiě),但是很少會(huì )考慮他們的執行順序。下邊的內容就是關(guān)于,他們同時(shí)出現時(shí)
哪個(gè)先起作用:
二:?jiǎn)?wèn)題分析
Java是"動(dòng)態(tài)單分派靜態(tài)多分派語(yǔ)言",這個(gè)定義已經(jīng)多次提起,如果你不了解這些概念,看這里"visitor模式準備"
所以就注定了重載(靜態(tài)多分派)要早于覆寫(xiě)(動(dòng)態(tài)單分派),因為靜態(tài)分派是編繹期實(shí)現的,動(dòng)態(tài)分派是執行期實(shí)現的。
三:驗證
見(jiàn)這里

最后的部分:

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

posted on 2006-12-18 20:20 dreamstone 閱讀(2916) 評論(18)  編輯  收藏 所屬分類(lèi): jdk相關(guān)

評論

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

.....字這么大....  回復  更多評論   

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

我感覺(jué)不是這樣的
因為你是這樣定義的
Parent p = new Child();

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

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

to 圣川:
如果是Child p = new Child()就沒(méi)有區別了,因為這樣無(wú)論怎么執行結果是一樣的。
不過(guò)仔細想想我的例子可能并不恰當,例子展示的好像是向下轉型和重載哪個(gè)發(fā)生更早些。不過(guò)這個(gè)說(shuō)法應該是對的,因為重載是編譯器確定的.  回復  更多評論   

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

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

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

我覺(jué)得重載和重構本身就是兩個(gè)不相干的事情,不會(huì )存在那個(gè)更早執行的問(wèn)題,因為他們兩個(gè)是不會(huì )重復的,你的方法要么是重載要么是重構,怎么會(huì )有個(gè)方法既是重寫(xiě)又是重構呢?舉個(gè)例子先  回復  更多評論   

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

to gg_shily :
現在想來(lái)我的例子可能有些問(wèn)題,但是重載和覆寫(xiě)還是可以同時(shí)出現的:
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)歷了一次重載和一次向下轉型,沒(méi)有向下轉型Parent不可能變成child,無(wú)論是在父類(lèi)還是子類(lèi)的兩個(gè)函數中選擇必定就是重載,所以重復出現是可能的。
只是這樣就體現不出來(lái)執行順序了,所以我改了一個(gè)版本出來(lái),現在向來(lái)但是的更改有寫(xiě)欠考慮。但是這個(gè)問(wèn)題肯定是存在的。
  回復  更多評論   

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

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

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

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

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

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

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

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

另外我又從另一個(gè)角度看了一下,你看看這個(gè)文章:
http://www.blogjava.net/dreamstone/archive/2006/12/20/88942.html  回復  更多評論   

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

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

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

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

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

補充一下,就是說(shuō),overload和override是兩個(gè)階段的概念。
在編譯期沒(méi)有override的概念,同樣,在運行期,也沒(méi)有overload的概念。  回復  更多評論   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C#中override和overload的區別
java的多態(tài)、重載、構造函數、析構函數的理解
Java中 重載overload和重寫(xiě)override(覆蓋)的區別
子類(lèi)繼承變量與原父類(lèi)變量的關(guān)系
有誰(shuí) 知道覆蓋與覆寫(xiě)有什么詳細的差別?
C++函數重定義、重載、重寫(xiě)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久