異なる戻り値の型によるオーバーロード
プログラミングでは、オーバーロードを使用すると、クラスまたは名前空間内に、異なるパラメーターを持つ同じ名前の関数が存在することができます。 。ただし、Java では、戻り値の型のみに基づいて関数をオーバーロードすることはできません。
なぜそうではないのですか?
Java コンパイラは、関数のシグネチャと戻り値の型を使用して関数を一意に識別します。コンパイラーが戻り値の型のみによるオーバーロードを許可すると、あいまいさが生じます。次の例を考えてみましょう:
<code class="java">public int foo() {...} public float foo() {..} ... foo(); // which one to call?</code>
この場合、コンパイラは戻り値の型のみに基づいて、どの foo メソッドを実行するかを決定できません。このあいまいさにより、コンパイル エラーが発生する可能性があります。
Java の将来
現時点では、Java の将来のバージョンでこの動作を変更する予定はありません。 Java 言語仕様では、「戻り値の型が異なる場合でも、2 つのメソッドが同じシグネチャを持つことはできません。」
C の考慮事項
戻り値の型によるオーバーロードは次のとおりです。 C でも不可能です。 Java と同様に、C コンパイラは戻り値の型を含むすべてのパラメータを使用して、同じ名前の関数を区別します。このアプローチにより、特定の関数呼び出しが常に意図した実装を参照するようになります。
以上がJava では戻り値の型のみに基づいてメソッドをオーバーロードできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。