[問題] 關於 method overloading

看板java作者 (團長)時間9年前 (2016/03/14 02:34), 9年前編輯推噓1(1016)
留言17則, 3人參與, 最新討論串1/1
各位板友好 目前在學習 method overloading,已經了解到不同 method 要 overloading 的前提是: 1. method的名稱要相同 2. 參數的型別順序或種類不同 另外,看到一句話有點不解 Internally, the compiler uses longer method names that include the original method name, the types of each parameter and the exact order of the parameters to determine whether the methods in a class are unique in that class. 解讀這句話的意思是: 編譯器實際的作法,是用較長的 method 簽名,來判定 類別中的其餘 method 是否為唯一。 但還是想多了解一些細節 我可以理解,不管程式中有無呼叫這些 overloaded method,編譯器也應該會去 比較不同 method,來確定類別中一定不會發生兩個以上的 method 有著相同簽名 但所謂的「longer」的意思是,有著較多參數的 method 嗎? 如果有板友能再多解釋一下編譯器的實際判定作法就太好了 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.91.203 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1457894092.A.9DD.html

03/14 03:32, , 1F
你(或者是教材)或許把 overload 跟 override 搞混了
03/14 03:32, 1F

03/14 03:33, , 2F
這裡講的東西比較接是 override, 繼承時有沒有覆蓋父類方法
03/14 03:33, 2F

03/14 03:33, , 3F
接近*
03/14 03:33, 3F

03/14 03:34, , 4F
overload 則只單純是同名, 而且正是以參數的不同做為分別
03/14 03:34, 4F

03/14 03:35, , 5F
至於所謂的較長 method 簽名, 各語言或各編譯器有不同做法
03/14 03:35, 5F

03/14 03:36, , 6F
java 的做法是把參數型態和回傳值編碼成一個字串
03/14 03:36, 6F

03/14 03:37, , 7F
使用這字串和函數名共兩個字串做一組來看
03/14 03:37, 7F

03/14 03:37, , 8F
其他語言有把這兩個字串給編碼在一起成一個字串的 (如 C++)
03/14 03:37, 8F

03/14 03:40, , 9F
一般這類的編碼規則會叫做 name-mangling
03/14 03:40, 9F

03/14 03:45, , 10F
抱歉,開頭那邊打錯了,我修改一下
03/14 03:45, 10F
※ 編輯: edash (1.162.91.203), 03/14/2016 03:45:54

03/14 12:31, , 11F
謝謝回應,我大概懂意思了
03/14 12:31, 11F

03/14 22:04, , 12F
我個人的解讀是,compiler其實用的名稱比你寫的還長
03/14 22:04, 12F

03/14 22:06, , 13F
那個更長的名稱則是以 原名稱+其參數型別 組合出來的
03/14 22:06, 13F

03/14 22:06, , 14F
因此只要參數型別/數量不同 就會被判斷成別的function
03/14 22:06, 14F

03/14 22:12, , 15F
表面上名稱一樣,但對compiler來說兩者是不一樣的東西
03/14 22:12, 15F

03/14 22:12, , 16F
^參數不同的
03/14 22:12, 16F

03/16 07:12, , 17F
謝謝兩位回應
03/16 07:12, 17F
文章代碼(AID): #1MvRBCdT (java)
文章代碼(AID): #1MvRBCdT (java)