ホームページ > 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);
    }
}
ログイン後にコピー

予期せぬことに、このコードは 3 つの呼び出しすべてに対して「foo(Object o)」を出力します。直感に反して、メソッドの選択では実際のパラメーターの型 (整数、文字列、オブジェクト) は考慮されません。代わりに、呼び出し先インターフェイスで宣言されたパラメーターの型のみに依存します。

この動作は、明示的に次のように規定されている 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート