Java では、同じクラスの 2 つ以上のメソッドが同じ名前を共有できるメソッドのオーバーロードが可能です。
メソッドのオーバーロードは、メソッドのパラメータ宣言が異なる場合に発生します。
メソッドのオーバーロードは、Java でポリモーフィズムを実装する方法です。
メソッドをオーバーロードするには、そのメソッドの異なるバージョンを宣言する必要があります。
コンパイラはパラメータに基づいて正しいメソッドを自動的に選択します。
重要な制限: オーバーロードされたメソッドは、戻り値の型だけでなく、パラメーターの型や数も異なっていなければなりません。
オーバーロードされたメソッドの戻り値の型も異なる場合がありますが、パラメータは正しいメソッドを選択するために不可欠です。
オーバーロードされたメソッドが呼び出されると、引数に一致するパラメータを持つバージョンが実行されます。
ovlDemo() メソッドは、異なるシグネチャで 4 回オーバーロードされます:
最初のバージョン: パラメーターなし。
2 番目のバージョン: 整数パラメーターを使用します。
3 番目のバージョン: 2 つの整数パラメーターを使用します。
4 番目のバージョン: 2 つの double パラメータを使用します。
ovlDemo() の最初の 2 つのバージョンは void を返しますが、最後の 2 つは値を返します。
メソッドのオーバーロードは戻り値の型の影響を受けません。
戻り値の型によってのみ区別されるシグネチャを使用して両方のバージョンの ovlDemo() を使用しようとすると、エラーが発生します。
Java でのメソッドのオーバーロードには、戻り値の型の違いだけでは十分ではありません。
この例は、戻り値の型が異なる場合でも、同じシグネチャを持つ 2 つのメソッドによってエラーが発生することを示しています。
Java は自動型変換を実行し、これらの変換はオーバーロードされたメソッドのパラメーターにも適用されます。
この例では、f() メソッドの 2 つのバージョンを示しています。1 つは int パラメーターを使用し、もう 1 つは double パラメーターを使用します。
byte 型および short 型の値は、f(int) メソッドを呼び出して自動的に int に変換されます。
float 値は f(double) メソッドを呼び出すことで double に変換されます。
パラメータと引数の間に直接の一致がない場合、自動変換が発生します。
バイトパラメータを使用して f() のバージョンを追加すると、値の処理方法が変更される可能性があります。
現在のバージョンでは、f() が byte 引数で呼び出された場合、int への自動変換は行われず、f(byte) が直接呼び出されます。
メソッドのオーバーロードにより Java でポリモーフィズムが可能になり、「1 つのインターフェイス、多数のメソッド」パラダイムの実装が容易になります。
オーバーロードのサポートがない言語では、異なるデータ型の同様のメソッドに異なる名前を付ける必要があります (C の abs()、labs()、fabs() など)。
Java では、異なる数値型に対してオーバーロードされる Math クラスの abs() メソッドなど、異なる型の引数を持つメソッドに同じ名前を使用できます。
オーバーロードにより、関連するメソッドが共通名を共有できるようになり、複雑さが軽減されます。
メソッドの正しいバージョンの選択は、引数の型に基づいてコンパイラによって行われます。
オーバーロードされたメソッドはさまざまなアクティビティを実行できますが、明確さと一貫性を維持するにはそれらを関連付ける必要があります。
コードの意図を混乱させる可能性があるため、無関係な操作にオーバーロードされたメソッド名を使用することは避けてください。
以上がメソッドのオーバーロードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。