看板 java 關於我們 聯絡資訊
※ 引述《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
forris:少寫了 system.out.print 04/08 01:04
slalala:x不覺得少寫 這只是要傳達概念 04/08 14:27