メソッドのオーバーロード
CoddyのJavaジャーニー「基礎」セクションの一部。レッスン 54/73。
Javaでは、メソッドのオーバーロードを使うと、同じ名前で異なるパラメーターを持つ複数のメソッドを定義できます。つまり、似た機能を実行しながら、異なるデータ型や異なる数の引数を扱う複数のメソッドを用意できます。
重要なのは、オーバーロードされた各メソッドが一意のメソッドシグネチャを持たなければならないということです。メソッドシグネチャは、メソッド名とパラメーターの型および順序によって決まります。
メソッドのオーバーロードに関する主なルールは次のとおりです。
- 同じ名前:オーバーロードされたメソッドはすべて同じ名前でなければなりません。
- 異なるパラメーター:メソッドの各バージョンは、パラメーターの数、パラメーターの型、またはその両方が異なっていなければなりません。
- 戻り値の型だけでは不十分:オーバーロードされたメソッドは、戻り値の型だけを変えても区別できません。異なるパラメーターリストが必要です。
メソッドのオーバーロードを説明する例を見てみましょう。
public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
public static double add(double a, double b) {
return a + b;
}
public static int add(int a, int b, int c) {
return a + b + c;
}
}この例では、addという名前のメソッドが3つあります。1つ目は2つの整数を加算し、2つ目は2つの倍精度浮動小数点数を加算し、3つ目は3つの整数を加算します。
Javaは、メソッド呼び出し時に渡された引数に基づいて、どのメソッドを呼び出すかを決定します。
引数の型に完全に一致するオーバーロードがない場合、Javaは暗黙的な拡大変換で変換できるものを選びます。たとえば、display(int a)とdisplay(double a)がある場合、呼び出しdisplay(5.0f)ではdouble版が使われます。これは、floatはdoubleに拡大変換できますが、キャストなしではintに変換できないためです。
メソッドのオーバーロードを使うと、コードの可読性と再利用性が高まります。似た処理を行うメソッドに異なる名前(例:addInts、addDoubles、addThreeInts)を付ける代わりに、addという1つの名前を使い、コンパイラーにコンテキストに応じて適切なメソッドを選ばせることができます。
覚えておきましょう。オーバーロードには、パラメーター名や戻り値の型を変えるだけではなく、パラメーターの型または個数を変える必要があります。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Javaオンラインコンパイラ