ホームページ > Java > &#&チュートリアル > Java メソッドのオーバーロードでは、メソッド選択の実行時パラメーターの型が考慮されますか?

Java メソッドのオーバーロードでは、メソッド選択の実行時パラメーターの型が考慮されますか?

DDD
リリース: 2024-12-15 09:25:10
オリジナル
174 人が閲覧しました

Does Java Method Overloading Consider Runtime Parameter Types for Method Selection?

メソッドのオーバーロードとパラメーターの型の決定

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 中国語 Web サイトの他の関連記事を参照してください。

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