本文へスキップ
BecomeCoder

Java文法コース · 第6章 メソッド ― 処理をひとまとまりにする · レッスン26

オーバーロード ― 同じ名前で違う引数を受け取る

ブラウザで完結

導入

「整数を足す」も「小数を足す」も、どちらも「足す」という同じ意味の処理です。でも引数の型が違います。こんなとき、わざわざ 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)int 2つなので1つ目、add(3.5, 2.5)double 2つなので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); } を追加します。

実際に動かしてみよう

下のエディタにJavaを書いて「実行」を押すと、学習用シミュレータが System.out.println の出力を表示します(本物のJVMではなく、教材の範囲を再現した軽量エンジンです)。クラス・継承・コレクションなども動きます。Scanner で入力を読む例は「標準入力」欄に値を入れてください。本文の例を書き換えて動かしてみましょう(Stream・ラムダ・スレッド・ファイル入出力など一部の機能は対象外です)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。