方法重載與參數型別決定
在Java中,方法重載允許定義多個同名但不同簽章的方法。呼叫方法時,會在編譯時根據該方法宣告的參數類型決定呼叫的具體實作。
但是要注意的是,這個確定僅根據聲明的參數類型來決定類型,而不是傳遞給方法的參數的實際運行時類型。此行為與某些程式語言相反,在某些程式語言中,在選擇方法時會考慮實際的運行時類型。
為了說明此概念,請考慮以下程式碼:
interface Callee { public void foo(Object o); public void foo(String s); public void foo(Integer i); } class CalleeImpl implements Callee public void foo(Object o) { logger.debug("foo(Object o)"); } public void foo(String s) { logger.debug("foo(\"" + s + "\")"); } public void foo(Integer i) { logger.debug("foo(" + i + ")"); } } Callee callee = new CalleeImpl(); Object i = new Integer(12); Object s = "foobar"; Object o = new Object(); callee.foo(i); callee.foo(s); callee.foo(o);
在此範例中,即使i 是Integer 對象,對callee.foo(i) 的呼叫也會呼叫foo( Object o) 方法,因為方法宣告的參數型別是Object。同樣,呼叫 callee.foo(s) 和 callee.foo(o) 會分別呼叫 foo(String s) 和 foo(Object o) 方法。
方法選擇可以考慮實際參數嗎型別?
Java 語言規格明確指出方法選擇過程只考慮參數的編譯時類型,而不考慮它們實際的執行時間類型。因此,不可能修改問題中給出的程式碼來實現根據參數的實際運行時類型呼叫該方法的所需行為。
以上是Java方法重載是否考慮方法選擇的執行時間參數類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!