本篇說明會著重在於多載(overloading)上 。 當同樣方法名稱,卻有著不同傳入參數形態、數量的時候, 此時同樣名稱的方法就可以同時存在,即便一個是傳入基本形態, 而另一個是傳入包裹基本形態的物件(wrapper object)。 但程式選擇傳入的方法,還是有先後順序的分別。 Match -> Promotion -> Auto Boxing -> Var-args ```java public class ExampleMethod3 { public static void main(String[] args) { /* * 依照這樣的順序,一個一個標注起來後,可以發現順序是 * int > long > Integer > int array * * 如果只剩下 Long 的話會錯誤,因為 int 無法提升成 Long 的形態。 */ test(1); /* * 對於這個例子來說, * 當呼叫 test 方法並傳入一個 List 物件, * 且該物件承載的是 String 元素時,這個方法是可以正確執行的。 * * 然而,如果將第二個 test 方法的註解移除,使其生效, * 就會發現這個程式碼將會出現錯誤。 * 儘管第二個方法的參數型別是 List<Integer>, * 與第一個方法的參數型別 List<String> 不同, * 但在方法本身的角度來看,它們都只是接收一個 List 物件作為參數, * 而不關心該 List 物件所承載的元素類型。 * * 至於要怎麼做才可以讓同一個方法,可以同時接受不同承載物件的內容, * 那就是之後才會說到的內容了。 */ test(new ArrayList<String>()); } //match public static void test(int i) { System.out.println("int"); } //auto boxing public static void test(Integer i) { System.out.println("Integer"); } //promotion public static void test(long i) { System.out.println("long"); } //error public static void test(Long i) { System.out.println("Long"); } //var-args public static void test(int...i) { System.out.println("int array"); } //這個 method 的 List 承載的是 String public static void test(List<String> list) {} //這個 method 的 List 承載的是 Integer //public static void test(List<Integer> list) {} } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up