1.7 方法重载
Java 允許同一個類中定義多個同名方法,只要它們的形參列表不同即可。如果同一個類中包含了兩個或兩個以上方法名相同的方法,但形參列表不同,這種情況被稱為方法重載(overload)。
例如,在 JDK 的 java.io.PrintStream 中定義了十多個同名的 println() 方法。
public void println(int i){…} public void println(double d){…} public void println(String s){…}這些方法完成的功能類似,都是格式化輸出。根據參數的不同來區分它們,以進行不同的格式化處理和輸出。它們之間就構成了方法的重載。實際調用時,根據實參的類型來決定調用哪一個方法。例如:
System.out.println(102); // 調用println(int i)方法 System.out.println(102.25); // 調用println(double d)方法 System.out.println("價格為 102.25"); // 調用println(String s)方法方法重載的要求是兩同一不同:同一個類中方法名相同,參數列表不同。至于方法的其他部分,如方法返回值類型、修飾符等,與方法重載沒有任何關系。
使用方法重載其實就是避免出現繁多的方法名,有些方法的功能是相似的,如果重新建立一個方法,重新取個方法名稱,會降低程序可讀性。
例 1
在比較數值時,數值的個數和類型是不固定的,可能是兩個 int 類型的數值,也可能是兩個 double 類型的數值,或者是兩個 double、一個 int 類型的數值;在這種情況下就可以使用方法的重載來實現數值之間的比較功能。具體實現代碼如下:
編譯、運行上面程序完全正常,雖然 3 個 max() 方法的方法名相同,但因為它們的形參列表不同,所以系統可以正常區分出這 3 個方法。當運行時,Java 虛擬機會根據傳遞過來的不同參數來調用不同的方法。運行結果如下:
1 與 5 比較,較大的是: 5 5.205 與 5.8 比較,較大的是: 5.8 2.15、0.05、58 中,較大的是: 58.0為什么方法重載不能用方法的返回值類型區分呢?
對于int f( ) { }和void( ) { }兩個方法,如果這樣調用int result = f();,系統可以識別是調用返回值類型為 int 的方法,但 Java 調用方法時可以忽略方法返回值,如果采用如下方法來調用f();,你能判斷是調用哪個方法嗎?如果你尚且不能判斷,那么 Java 系統也會糊涂。在編程過程中有一條重要規則就是不要讓系統糊涂,系統一糊涂,肯定就是你錯了。因此,Java 里不能用方法返回值類型作為區分方法重載的依據。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 1.6 为什么使用向上转型而不直接创建子
- 下一篇: 1.8 方法重写