Javaのメソッドオーバーロードとは?同じ名前で引数を変える考え方

最終更新日

Schoo Java入門 初級【2026年版】

本記事は、Schooの「Java入門 初級【2026年版】」第6回「メソッド」を学ぶ前後に、Javaのメソッドオーバーロードを整理したい方向けのステップアップ学習記事です。

ただし、Schooを受講していない方でも、引数と戻り値の基本を学んだあとに読み進められる内容にしています。

Schoo コースページ:Java入門 初級【2026年版】

メソッドオーバーロードとは、同じ名前のメソッドを複数定義する仕組みです。ただし、まったく同じ形のメソッドを並べるのではなく、引数の数や型を変えて定義します。

オーバーロードは同じ目的の処理を同じ名前で呼ぶための仕組み

たとえば、メッセージを1回だけ表示する場合と、同じメッセージを複数回表示する場合を考えます。どちらも「メッセージを表示する」という目的は同じなので、同じ printMessage という名前にできます。

public static void printMessage(String text) {
    System.out.println(text);
}

public static void printMessage(String text, int count) {
    for (int i = 0; i < count; i++) {
        System.out.println(text);
    }
}

1つ目は文字列だけを受け取るメソッドです。2つ目は文字列と回数を受け取るメソッドです。メソッド名は同じですが、引数の数が違うため、Javaは別のメソッドとして扱えます。

図解:同じメソッド名でも、引数の違いで呼び分けられる
呼び出し元
printMessage(“処理を開始します”);
↓ 引数が1つ
printMessage(“保存しました”, 3);
↓ 引数が2つ
Javaが選ぶメソッド
printMessage(String text)
printMessage(String text, int count)
メソッド名だけでなく、かっこの中に渡す値の数や型も見て、どのメソッドを実行するかが決まります。
同じ printMessage という名前でも、引数が1つの場合と2つの場合で別のメソッドとして定義できます。

呼び出すときは引数の形で判断される

次のように呼び出すと、Javaはかっこの中に渡した値を見て、どちらのメソッドを使うか判断します。

printMessage("処理を開始します");
printMessage("保存しました", 3);

printMessage("処理を開始します"); は引数が1つなので、printMessage(String text) が呼び出されます。printMessage("保存しました", 3); は引数が2つなので、printMessage(String text, int count) が呼び出されます。

引数の型が違う場合もオーバーロードできる

引数の数が同じでも、型が違えばオーバーロードできます。次の例では、整数の金額を表示するメソッドと、文字列のラベル付きで表示するメソッドを分けています。

public static void printPrice(int price) {
    System.out.println(price + "円");
}

public static void printPrice(String label, int price) {
    System.out.println(label + ":" + price + "円");
}

printPrice(1200)printPrice("送料込み", 1500) は、同じ printPrice という名前で呼び出せます。使う側から見ると、価格を表示する処理を同じ名前で扱えるため、読みやすくなります。

戻り値の型だけを変えてもオーバーロードにはならない

オーバーロードで区別されるのは、引数の数、型、順番です。戻り値の型だけを変えても、Javaはどちらを呼び出せばよいか判断できません。

// これはオーバーロードとして使えません
public static int getValue() {
    return 100;
}

public static String getValue() {
    return "100";
}

呼び出し元で getValue() と書いたとき、引数がない形はどちらも同じです。そのため、戻り値の型だけが違うメソッドは同時に定義できません。

確認問題

  1. printMessage(String text)printMessage(String text, int count) は、なぜ同じ名前で定義できますか。
  2. オーバーロードで区別されるのは、引数の数、型、順番のうちどれですか。
  3. 戻り値の型だけが違う getValue() を2つ定義できないのはなぜですか。

演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。

あわせて読みたい関連記事

まとめ

メソッドオーバーロードは、同じ名前のメソッドを、引数の数や型を変えて定義する仕組みです。同じ目的の処理を同じ名前で呼べるため、呼び出す側のコードを読みやすくできます。ただし、戻り値の型だけを変えてもオーバーロードにはならない点に注意しましょう。

シェアする