Javaのオーバーロード
メソッドを引数を付けて呼び出す時、引数に記述する値のデータ型はメソッドで決められたものしか指定できないのがJavaのルールです。
その為、同じような機能を持つメソッドであっても引数のデータ型が異なれば別々のメソッドを用意する必要があります。
一つ例を見てみましょう。
public static void main(String args) {
int n = plusInt(15, 9);
System.out.println(n);
double d = plusDouble(9.3, 6.5);
System.out.println(d);
}
public static int plusInt(int n1, int n2) {
return n1 + n2;
}
public static double plusDouble(double d1, double d2) {
return d1 + d2;
}
}
上記の例ではint型の値の加算を行うメソッドとdouble型の値の加算を行うメソッドを2つ用意しています。これはこれで間違っていませんが、同じような機能を持つメソッドであれば引数のデータ型が異なっていても同じメソッド名を使って呼び出せると便利です。
Javaでは引数のデータ型や引数の数が完全に一致していなければ異なるメソッドに同じメソッド名を付けることが出来ます。
ここで上記の例を書き換えてみます。
public static void main(String args) {
int n = add(15, 9);
System.out.println(n);
double d = add(9.3, 6.5);
System.out.println(d);
}
public static int add(int n1, int n2) {
return n1 + n2;
}
public static double add(double d1, double d2) {
return d1 + d2;
}
addメソッドは同じクラスの中に2回定義されていますが、引数の数は同じでも引数のデータ型が異なるため区別することが可能となっています。
メリットとしては、メソッド名を明確に分けたほうが便利な場合もありますが、メソッド名を同じにしておけば引数のデータ型を意識することなく利用することができる点です。
その他に
・引数のデータ型と数は同じでも順番が異なっている場合もオーバーロード可能です。
public static void test(int n1, double d1) {
// ...
}
public static void test(double d1, int n1){
// ...
}
最後にオーバーロードできない場合も簡単に紹介します。
・引数の変数名だけが異なっている場合
・戻り値だけが異なっている場合
はNGとなります。
みなさんも自分で記述してみてください!