導入
「整数を足す」も「小数を足す」も、どちらも「足す」という同じ意味の処理です。でも引数の型が違います。こんなとき、わざわざ addInt addDouble のように名前を分けなくても、同じ名前のまま引数の違いで使い分けられる仕組みがあります。それが オーバーロード です。
説明
public class Main {
public static void main(String[] args) {
System.out.println(add(3, 5)); // int版が呼ばれる
System.out.println(add(3.5, 2.5)); // double版が呼ばれる
System.out.println(add(1, 2, 3)); // 3引数版が呼ばれる
}
static int add(int a, int b) {
return a + b;
}
static double add(double a, double b) {
return a + b;
}
static int add(int a, int b, int c) {
return a + b + c;
}
}
- 同じ
addという名前のメソッドが3つ定義されています。Javaは引数の型・個数を見て、どのaddを呼ぶべきか自動で判断します。これを メソッドのオーバーロード と呼びます。 add(3, 5)はint2つなので1つ目、add(3.5, 2.5)はdouble2つなので2つ目、add(1, 2, 3)は引数が3つなので3つ目が呼ばれます。- オーバーロードできるのは引数の型や数が違う場合だけです。戻り値の型だけが違うメソッドは、Javaでは同じ名前で定義できません。
やってみよう
下のエディタに新しい add(例えば String 2つを受け取って連結する版)を追加してみましょう。呼び出し方によって、どの add が使われるか確かめてください。
演習
describe(int age) と describe(String name) という2つのオーバーロードされたメソッドを作ってください。前者は 年齢:20 の形、後者は 名前:太郎 の形で表示します。main から describe(20); と describe("太郎"); を順に呼び出してください(結果は 年齢:20 の次に 名前:太郎)。
ヒント1を見る
static void describe(int age) { System.out.println("年齢:" + age); } のように書きます。
ヒント2を見る
もう1つ static void describe(String name) { System.out.println("名前:" + name); } を追加します。