Re: [問題] 不定長度引數的overloading問題

看板java作者 (!H45)時間17年前 (2008/04/07 23:13), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串4/4 (看更多)
※ 引述《FatDevil (You Are The One!!)》之銘言: : ※ 引述《H45 (!H45)》之銘言: : : 此例 Father f = new Son(); : : f 的型別是 Father, 實體是 Son : : 所以能夠看到的 f 成員都是 Father 型別所定義的 : : 換言之 Son 型別裡面新定義的成員都看不見 : : 因此 f.foo("test") 只可能是 Father 的 foo(String ... a) 型態 : : 然後因為 f 的實體是 Son, 而 Son 繼承 Father : : 所以 f.foo("test") 實際上是呼叫 Son 的 foo(String ... a) : : 但是 Son 沒有再定義 foo(String ... a) : : 這意味著 Son 的 foo(String ... a) 是繼承自 Father 的 foo(String ... a) : : 也就是說 Son 的 foo(String ... a) 就是 Father 的 foo(String ... a) : : 如果需要一個名稱來稱呼這個現象的話,這叫作 overload : 恩 我不懂的是foo(String ... a) 本質應該是foo(String[] a) : 在兩個以上的String當引數的話,那沒問題當然是呼叫foo(String ... a) :  可是在只有一個String的引數的情形下呢? : 他要怎麼去分辨要呼叫哪一個? 一個也是一個 多個也包含一個(看的懂嗎XD) : 因為overloading不就是用引數的差異來區分你呼叫的是哪一個method :  這裡就是我搞不清楚的地方@@ 那就針對這一點來重新定義問題吧 public class Test { public void foo(String ... a) {} public void foo(String a) {} public static void main(String args[]) { Test t = new Test(); t.foo("test"); } } 跑一跑這個程式就知道它會去呼叫哪一個囉! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.172.148

04/08 01:04, , 1F
少寫了 system.out.print
04/08 01:04, 1F

04/08 14:27, , 2F
x不覺得少寫 這只是要傳達概念
04/08 14:27, 2F
文章代碼(AID): #17-ZeTBN (java)
討論串 (同標題文章)
文章代碼(AID): #17-ZeTBN (java)