首頁 > Java > java教程 > Java 方法重載是否考慮執行時間參數類型或僅考慮編譯時宣告的型別?

Java 方法重載是否考慮執行時間參數類型或僅考慮編譯時宣告的型別?

Barbara Streisand
發布: 2024-12-31 18:55:10
原創
1017 人瀏覽過

Does Java Method Overloading Consider Runtime Parameter Types or Only Compile-Time Declared Types?

重載方法選擇:實數與宣告的參數類型

在Java 程式設計中,重載方法提供了使用相同的方法定義多個方法的靈活性名稱但參數清單不同。呼叫方法時,編譯器會根據提供的參數清單決定要呼叫的適當方法。

但是,在某些情況下,您可能想知道方法選擇是否考慮參數的實際(運行時)類型所聲明的類型。考慮以下程式碼:

interface Callee {
    void foo(Object o);
    void foo(String s);
    void foo(Integer i);
}

class CalleeImpl implements Callee {
    @Override
    public void foo(Object o) { System.out.println("foo(Object o)"); }
    @Override
    public void foo(String s) { System.out.println("foo(\"" + s + "\")"); }
    @Override
    public void foo(Integer i) { System.out.println("foo(" + i + ")"); }
}

public class Main {
    public static void main(String[] args) {
        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);
    }
}
登入後複製

出乎意料的是,此程式碼為所有三個呼叫列印「foo(Object o)」。與直覺相反,方法選擇沒有考慮實際參數類型(整數、字串和物件)。相反,它僅依賴 Callee 介面中聲明的參數類型。

此行為源自於Java 語言規範,其中明確指出:

When a method is invoked, the number of actual arguments and the compile-time types of the arguments are used, at compile time, to determine the signature of the method that will be invoked.
登入後複製

因此,需要注意的是在Java中,動態方法調度,即在運行時根據調用的對象確定實際呼叫的方法,僅適用於物件本身,不適用於參數類型。

以上是Java 方法重載是否考慮執行時間參數類型或僅考慮編譯時宣告的型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板