- Scala編程(第5版)
- (德)馬丁·奧德斯基等
- 551字
- 2022-05-06 15:51:47
6.11 方法重載
回到Rational類。有了最新的這些變更以后,就可以用更自然的風格來對有理數進行加法和乘法運算。不過我們還缺少混合運算。比如,不能用一個有理數乘以一個整數,因為*的操作元必須都是Rational對象。因此對于一個有理數r,不能寫成r * 2,而必須寫成r * new Rational(2),這并不是理想的效果。
為了讓Rational類用起來更方便,我們將添加兩個新的方法來對有理數和整數進行加法和乘法運算。同時,我們還會順便加上減法和除法運算。調整后的結果請看示例6.5。
現在每個算術方法都有兩個版本:一個接收有理數作為參數;另一個則接收整數作為參數。換句話說,每個方法名都被重載了,因為每個方法名都被用于多個方法。舉例來說,+這個方法名被同時用于一個接收Rational參數的方法和另一個接收Int參數的方法。在處理方法調用時,編譯器會選取重載方法中正確匹配了入參類型的版本。例如,如果x.+(y)中的y是有理數,編譯器就會選擇接收Rational參數的+方法。但如果入參是整數,編譯器就會選擇接收Int參數的那個方法。如果你嘗試下面這段代碼:


示例6.5 帶有重載方法的Rational類
你將會看到,被調用的*方法具體是哪一個取決于右操作元的類型。
注意
Scala解析重載方法的過程與Java很像。在每個具體的案例中,被選中的是那個最匹配入參靜態類型的重載版本。有時候并沒有一個唯一的最佳匹配版本,遇到這種情況編譯器會提示“ambiguous reference”(模糊引用)錯誤。
推薦閱讀
- Java多線程編程實戰指南:設計模式篇(第2版)
- 騰訊iOS測試實踐
- PyQt從入門到精通
- Raspberry Pi for Secret Agents(Third Edition)
- Building Mobile Applications Using Kendo UI Mobile and ASP.NET Web API
- Java Web程序設計
- Java軟件開發基礎
- 正則表達式經典實例(第2版)
- Ext JS 4 Web Application Development Cookbook
- Mastering ServiceNow(Second Edition)
- Express Web Application Development
- Mastering Python Design Patterns
- Android嵌入式系統程序開發:基于Cortex-A8(第2版)
- Visual Studio Code 權威指南
- Python應用開發技術