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() メソッドなど、異なる型の引数を持つメソッドに同じ名前を使用できます。
オーバーロードにより、関連するメソッドが共通の名前を共有できるようになり、複雑さが軽減されます。
メソッドの正しいバージョンの選択は、引数の型に基づいてコンパイラによって行われます。
オーバーロードされたメソッドはさまざまなアクティビティを実行できますが、明確さと一貫性を維持するにはそれらを関連付ける必要があります。
コードの意図を混乱させる可能性があるため、無関係な操作にオーバーロードされたメソッド名を使用することは避けてください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3