32
A
回答
49
方法重載在編譯時解決。
多次調度在運行時解析。
使用雙分派時,被調用的方法取決於接收方和參數的實際類型。然而,方法重載只允許被調用的方法依賴於聲明的參數類型。爲什麼? Java在編譯時將它們的全部簽名綁定到方法調用(早期綁定)。完整的簽名包括所有的參數類型,因此當參數的實際類型在運行時(polymoprhism)有所不同時,重載不能像你期望的那樣工作!
void add(Foo o) { ... }
void add(Bar o) { ... }
void client() {
Foo o = new Bar();
add(o); // calls add(Foo) not add(Bar)!
}
使用多分派然而
void add(Foo o) { o.dispatch(this); }
void add(Bar o) { o.dispatch(this); }
void client() {
Foo o = new Bar();
add(o); // calls #dispatch as defined in Bar!
}
事情可能在Scala中略有不同,但一般的區別應該是一樣的在這裏所有的編程語言呈現。
相關問題
- 1. 方法重載和方法重寫有什麼區別Ios
- 2. bootstrap方法和run方法在角度上有什麼區別?
- 3. 算法和方法有什麼區別
- 4. 'remove'和'removeChild'方法有什麼區別?
- 5. Html.Partial和Html.Action方法有什麼區別?
- 6. browser.sleep()和browser.wait()方法有什麼區別?
- 7. 方法`toHaveBeenCalled()`和`andCalledThrough()`有什麼區別?
- 8. 'configure'和'configureGlobal'方法有什麼區別?
- 9. bcrypt()和crypt()方法有什麼區別?
- 10. GET和POST方法有什麼區別?
- 11. UrlHelper.Route和UrlHelper.Link方法有什麼區別?
- 12. nibNameOrNil和ViewDidLoad方法有什麼區別?
- 13. 方法和協議有什麼區別
- 14. 精度和刻度有什麼區別?
- 15. 長度和長度()有什麼區別?
- 16. 在Java中重載和多次調度
- 17. 方法覆蓋和功能覆蓋/超載有什麼區別
- 18. 消息傳遞和方法調用有什麼區別?
- 19. jQuery中的調用和應用方法有什麼區別
- 20. 嵌套方法調用和代表之間有什麼區別?
- 21. 調用javascript方法的兩種方法有什麼區別
- 22. pm2重新啓動和pm2重新加載有什麼區別
- 23. s3下載和getobject有什麼區別
- 24. 強制和超載有什麼區別?
- 25. UITableView方法和等效的UITableViewDatasource方法有什麼區別?
- 26. Python中的string方法和str方法有什麼區別?
- 27. 靜態方法和非靜態方法有什麼區別?
- 28. 海報post方法和jquery post方法有什麼區別?
- 29. setter方法和構造方法有什麼區別?
- 30. 本練習中substr方法和slice方法有什麼區別?
感謝您的好例子。 – shj 2013-12-10 21:53:20