メソッドのオーバーロードとは
メソッドのオーバーロードは、2つ以上のメソッドが同じ名前を共有しますが、パラメーターが異なるほとんどのオブジェクト指向プログラミング言語の機能です。 具体的には、パラメータの数、データ型、および/または順序が異なります。 コードがコンパイルされると、その呼び出し方法に基づいて正しいメソッドが自動的に選択されます。 メソッドは一部のプログラミング言語では関数としても知られているため、メソッドのオーバーロードは関数オーバーロードと呼ばれることもあります。
メソッドのオーバーロードの簡単な例は、正方形の面積を計算するメソッドです。 getArea(Square s)として定義される場合があります。 このメソッドをオーバーロードして、getArea(Circle c)メソッドを追加することにより、円の面積をさらに計算できます。
メソッドのオーバーロードの主な要件は、メソッドが同じ名前を共有することです。 それ以外の場合、メソッドのシグネチャ(メソッド名、パラメーターの数、パラメーターのデータ型)は一意でなければなりません。 このようにして、コンパイラは実行するメソッドを決定できます。
多くの場合、オブジェクトのインスタンス化に使用されるメソッドであるコンストラクターはオーバーロードされます。 これは、デフォルト以外の値でオブジェクトを初期化するために行われます。 たとえば、2つのフィールド(名前と生年月日、またはdob)を持つ従業員オブジェクトには、次のオーバーロードされたコンストラクタがあります:Employee()、Employee(name)、およびEmployee(name、dob)。 最初のコンストラクターは、名前とdobフィールドが空白の従業員オブジェクトを作成します。 2番目は名前フィールドを設定しますが、dobフィールドは空白のままにし、3番目は名前とdobフィールドの両方を定義します。
メソッドのオーバーロードは、多くの場合、複数のメソッドを論理的に単一のメソッドとして表示するために行われます。 getArea()の例では、物理的に2つのメソッドがありますが、呼び出し元には単一の論理的なgetArea()メソッドが提示されます。 このようにして、getArea()は他の形状(三角形、台形など)で機能するように拡張できますが、それでも1つのメソッドとして論理的に表示されます。
メソッドは、後方互換性を維持するためにオーバーロードされます。 複雑な計算を行うメソッドには、わずかな変更を加えて同じ計算をオプションで実行するという新しい要件が与えられます。 新しいパラメータがメソッドに追加され、計算の実行方法(古い方法または新しい方法)が決定されます。
メソッドが呼び出されるすべてのケースを見つけて新しいパラメーターを追加する必要を回避するために、メソッドをオーバーロードできます。 新しいメソッドは古い署名を持ち、既存のコードによって呼び出されます。 ロジック自体は含まれず、変更されたメソッドを呼び出して、新しいパラメーターにデフォルトの「古い方法」を渡します。 新しいコードは、変更されたメソッドを呼び出し、適切な値、古い方法または新しい方法で新しいパラメーターを渡します。
メソッドのオーバーロードはポリモーフィズムの一種で、実際には同じ論理メソッドを複数の方法で使用できます。 メソッドのオーバーロードは、メソッドのオーバーライドとは異なります。 メソッドのオーバーライドは、親クラスのメソッドの定義が子クラスによって変更される場所です。 この場合、両方のメソッドの署名は同じになります。