【JAVA】レッスン3-04:メソッドのオーバーロードを理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:真偽値を返すメソッド

この記事の練習問題で使用する知識:
基礎構文と制御構造(レッスン1~2)、メソッドの定義と呼び出し、メソッドの戻り値、真偽値を返すメソッドメソッドのオーバーロードジェネリクス

<<前の問題 問題集Top 次の問題>>

JAVAの文法「メソッドのオーバーロード」とは

ここではメソッドのオーバーロードの意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。



今回は「メソッドのオーバーロード」という便利な機能について説明します。

オーバーロードは同じメソッド名で異なるパラメータを持つ複数のメソッドを定義する方法です。

これにより同じ操作を異なるパラメータで処理することができ、コードがより直感的でわかりやすくなります。

メソッドのオーバーロードの基本

Javaではメソッド名が同じでも引数(パラメータ)の型や数が異なれば、複数のメソッドを定義することが可能です。

これをオーバーロード(Overload)と言います。

例えばaddというメソッドを使って、整数を足す場合と、小数を足す場合を考えてみましょう。

public class Calculator {
    // 1. 整数を足すメソッド
    public int add(int a, int b) {
        return a + b;
    }

    // 2. 小数を足すメソッド
    public double add(double a, double b) {
        return a + b;
    }

    // 3. 3つの整数を足すメソッド
    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

なぜメソッドのオーバーロードを使うのか?

コードの可読性向上再利用性が主なメリットです。

例えば異なるデータ型に対応した同じ処理を行いたいとき、異なる名前のメソッドをいくつも作るより、同じメソッド名でオーバーロードしたほうが直感的です。

これにより同じ操作に対して共通の名前を使えるため、コードを読む際に何をしているのかが理解しやすくなります。

メソッドのオーバーロードのルール

オーバーロードにはいくつかのルールがあります。

  1. メソッド名は同じでなければならない。
  2. パラメータの数が異なるか、パラメータの型が異なる必要があります。
  3. 戻り値の型だけが異なる場合は、オーバーロードできません。

次の例を見てください。

public class Example {
    // 1. 1つの引数を持つメソッド
    public void display(int a) {
        System.out.println("Integer: " + a);
    }

    // 2. 2つの引数を持つメソッド
    public void display(int a, int b) {
        System.out.println("Integers: " + a + ", " + b);
    }

    // 3. 引数の型が異なるメソッド
    public void display(String a) {
        System.out.println("String: " + a);
    }
}

このように同じメソッド名でも、パラメータの数や型が異なることでオーバーロードが可能です。

メソッドのオーバーロードの実例

次に実際のオーバーロードの使い方を確認してみましょう。

public class OverloadExample {
    // 1. メッセージを表示するメソッド (整数の場合)
    public void showMessage(int number) {
        System.out.println("整数のメッセージ: " + number);
    }

    // 2. メッセージを表示するメソッド (文字列の場合)
    public void showMessage(String message) {
        System.out.println("文字列のメッセージ: " + message);
    }

    public static void main(String[] args) {
        OverloadExample example = new OverloadExample();

        // オーバーロードされたメソッドを呼び出す
        example.showMessage(123);        // 整数を渡す
        example.showMessage("こんにちは"); // 文字列を渡す
    }
}

この例ではshowMessageというメソッドが整数用と文字列用にオーバーロードされています。

mainメソッドで異なる型の引数を渡すと、それぞれ対応するオーバーロードされたメソッドが呼び出されます。

まとめ

メソッドのオーバーロードは同じメソッド名で異なるパラメータを扱う便利な機能です。

これを使うことでコードをよりシンプルで読みやすく、再利用可能にすることができます。

Javaの他の機能と組み合わせて、オーバーロードを効果的に活用していきましょう。

JAVA練習問題3-4-1_整数の合計を計算するオーバーロードメソッド

2つのメソッドを作成しオーバーロードさせましょう。

1.2つの整数を引数として受け取り、その合計を返すメソッド
2.3つの整数を引数として受け取り、その合計を返すメソッド

これらのメソッドを使用して2つの整数と3つの整数の合計を計算し、結果を表示するプログラムを作成してください。

この問題の要件

以下の要件に従ってプログラムを完成させて下さい。

  • 2つの整数を引数として受け取り、その合計を返すsumメソッドを定義すること。
  • 3つの整数を引数として受け取り、その合計を返すsumメソッドを定義すること(メソッドのオーバーロード)。
  • mainメソッド内で、2つの整数の合計と3つの整数の合計を計算して表示すること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

5 + 3 = 8
5 + 3 + 2 = 10

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1:SumIntegersクラスの定義
  □ 2つの整数を引数として受け取り、その合計を返すメソッドsumの定義
  □ □ 2つの整数の合計を計算して返す
  □ 3つの整数を引数として受け取り、その合計を返すメソッドsumの定義
  □ □ 3つの整数の合計を計算して返す
  □ mainメソッドの定義
  □ □ 2つの整数の合計を計算し、変数result1に代入
  □ □ 「5 + 3 = 」とresult1の値を出力
  □ □ 3つの整数の合計を計算し、変数result2に代入
  □ □ 「5 + 3 + 2 = 」とresult2の値を出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

public class SumIntegers {

    // 2つの整数を引数として受け取り、その合計を返すメソッド
    public static int sum(int a, int b) {
        /*【穴埋め問題1】
        ここに2つの整数の合計を計算して返すコードを書いてください。
        */
    }

    // 3つの整数を引数として受け取り、その合計を返すメソッド
    public static int sum(int a, int b, int c) {
        /*【穴埋め問題2】
        ここに3つの整数の合計を計算して返すコードを書いてください。
        */
    }

    public static void main(String[] args) {
        // 2つの整数の合計を計算
        /*【穴埋め問題3】
        ここにsumメソッドを呼び出して5と3の合計をresult1に代入するコードを書いてください。
        */
        System.out.println("5 + 3 = " + result1); // 8

        // 3つの整数の合計を計算
        /*【穴埋め問題4】
        ここにsumメソッドを呼び出して5、3、2の合計をresult2に代入するコードを書いてください。
        */
        System.out.println("5 + 3 + 2 = " + result2); // 10
    }
}

この問題の穴埋めコードは以上です。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

JAVA練習問題3-4-1の解答例

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

public class SumIntegers {

    // 2つの整数を引数として受け取り、その合計を返すメソッド
    public static int sum(int a, int b) {
        // 2つの整数の合計を計算して返す
        return a + b;
    }

    // 3つの整数を引数として受け取り、その合計を返すメソッド
    public static int sum(int a, int b, int c) {
        // 3つの整数の合計を計算して返す
        return a + b + c;
    }

    public static void main(String[] args) {
        // 2つの整数の合計を計算
        int result1 = sum(5, 3);
        System.out.println("5 + 3 = " + result1); // 8

        // 3つの整数の合計を計算
        int result2 = sum(5, 3, 2);
        System.out.println("5 + 3 + 2 = " + result2); // 10
    }
}

********************

コードの解説

このコードでは複数の整数を受け取り、その合計を返すメソッドを定義しています。

初心者にとって大切な部分をひとつずつ説明します。

クラス定義

public class SumIntegers {

SumIntegers というクラスを定義しています。

このクラスの中でメソッドを使って計算処理を行います。

メソッド sum(int a, int b)

public static int sum(int a, int b) {
    return a + b;
}

このメソッドは2つの整数を引数として受け取り、その合計を返します。

  • public: 他のクラスからアクセスできるようにするアクセス修飾子です。
  • static: このメソッドがクラスレベルであることを意味し、インスタンスを作らずに直接呼び出せます。
  • int sum(int a, int b): int 型の値を返すメソッドです。
  • return a + b;: 2つの引数 ab の合計を返します。

メソッド sum(int a, int b, int c)

public static int sum(int a, int b, int c) {
    return a + b + c;
}

こちらは3つの整数を引数として受け取り、その合計を返すメソッドです。

先ほどと同様に3つの引数を加算して結果を返します。

メインメソッド main

public static void main(String[] args) {
    int result1 = sum(5, 3);
    System.out.println("5 + 3 = " + result1); // 8

    int result2 = sum(5, 3, 2);
    System.out.println("5 + 3 + 2 = " + result2); // 10
}

main メソッドはJavaプログラムのエントリーポイントです。ここでは次の操作を行います。

  1. 2つの整数の合計
    sum(5, 3) を呼び出し、5と3の合計を result1 に代入します。System.out.println を使って結果を出力します。
  2. 3つの整数の合計
    sum(5, 3, 2) を呼び出し、5、3、2の合計を result2 に代入します。同様に、結果を出力します。

JAVA練習問題3-4-2_整数と少数の合計を計算するオーバーロードメソッド

2つのメソッドを作成し、オーバーロードさせましょう。

1.2つの整数を引数として受け取り、その合計を返すメソッド
2.2つの少数を引数として受け取り、その合計を返すメソッド

これらのメソッドを使用して、それぞれの合計値を表示するプログラムを作成してください。

この問題の要件

以下の要件に従ってプログラムを完成させてください。

  • 2つの整数を受け取り、その合計を返すメソッド sum(int a, int b) を定義すること。
  • 2つの少数を受け取り、その合計を返すメソッド sum(double a, double b) を定義すること。
  • 定義したメソッドを main メソッドから呼び出し、結果を表示すること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

5 + 3 = 8
5.5 + 3.3 = 8.8

----- ↑出力される結果の例↑ -----

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1:SumNumbersクラスの定義
  □ 2つの整数を引数として受け取り、その合計を返すsumメソッドの定義
  □ □ 2つの整数の合計を計算して返す
  □ 2つの少数を引数として受け取り、その合計を返すsumメソッドの定義
  □ □ 2つの少数の合計を計算して返す
  □ mainメソッドの定義
  □ □ 2つの整数の合計を計算し、変数result1に代入
  □ □ 5 + 3 = の結果を出力
  □ □ 2つの少数の合計を計算し、変数result2に代入
  □ □ 5.5 + 3.3 = の結果を出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

public class SumNumbers {

    // 2つの整数を引数として受け取り、その合計を返すメソッド
    public static int sum(int a, int b) {
        /*【穴埋め問題1】
        ここに2つの整数の合計を計算して返すコードを書いてください。
        */
    }

    // 2つの少数を引数として受け取り、その合計を返すメソッド
    public static double sum(double a, double b) {
        /*【穴埋め問題2】
        ここに2つの少数の合計を計算して返すコードを書いてください。
        */
    }

    public static void main(String[] args) {
        // 2つの整数の合計を計算
        /*【穴埋め問題3】
        ここでsumメソッドを呼び出して5と3の合計を計算し、result1に代入してください。
        */

        /*【穴埋め問題4】
        ここで5 + 3 の計算結果を出力するコードを書いてください。
        */

        // 2つの少数の合計を計算
        /*【穴埋め問題5】
        ここでsumメソッドを呼び出して5.5と3.3の合計を計算し、result2に代入してください。
        */

        /*【穴埋め問題6】
        ここで5.5 + 3.3 の計算結果を出力するコードを書いてください。
        */
    }
}

この問題の穴埋めコードは以上です。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

JAVA練習問題3-4-2の解答例

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

public class SumNumbers {

    // 2つの整数を引数として受け取り、その合計を返すメソッド
    public static int sum(int a, int b) {
        // 2つの整数の合計を計算して返す
        return a + b;
    }

    // 2つの少数を引数として受け取り、その合計を返すメソッド
    public static double sum(double a, double b) {
        // 2つの少数の合計を計算して返す
        return a + b;
    }

    public static void main(String[] args) {
        // 2つの整数の合計を計算
        int result1 = sum(5, 3);
        System.out.println("5 + 3 = " + result1); // 8

        // 2つの少数の合計を計算
        double result2 = sum(5.5, 3.3);
        System.out.println("5.5 + 3.3 = " + result2); // 8.8
    }
}

********************

コードの解説

このJavaコードは整数と少数の足し算を行う「SumNumbers」クラスです。

Javaでメソッドのオーバーロード(同名のメソッドで異なるパラメータリストを持つこと)を用いることで、異なるデータ型の引数に対応した足し算を実現しています。

クラスの宣言

public class SumNumbers {

publicキーワードによりこのクラスはどこからでもアクセス可能です。

classキーワードでクラスを定義しておりクラス名は「SumNumbers」です。

整数を加算するsumメソッド

public static int sum(int a, int b) {
    return a + b;
}
  • メソッドの構成public static int sum(int a, int b)は、二つの整数abを引数に取り、これらの合計を返すメソッドです。
  • public:このメソッドは他のクラスからもアクセス可能です。
  • static:このメソッドはクラスメソッドであり、インスタンスを生成せずに利用可能です。
  • int:戻り値のデータ型が整数であることを示します。
  • return a + b;:引数abを加算し、その結果を返します。

少数を加算するsumメソッド

public static double sum(double a, double b) {
    return a + b;
}

こちらも「sum」という名前のメソッドですが、引数のデータ型がdoubleに変わっています。

これによりメソッドのオーバーロードが実現されています。少数の合計を計算して返すことが可能です。

mainメソッド

public static void main(String[] args) {

Javaプログラムのエントリーポイントであり、コードの実行が始まる部分です。

整数の合計を計算する

int result1 = sum(5, 3);
System.out.println("5 + 3 = " + result1); // 8
  • int result1 = sum(5, 3);sumメソッドを呼び出し、整数5と3を加算した結果をresult1に代入します。
  • 出力System.out.println("5 + 3 = " + result1);により、result1の内容(ここでは8)が表示されます。

少数の合計を計算する

double result2 = sum(5.5, 3.3);
System.out.println("5.5 + 3.3 = " + result2); // 8.8
  • double result2 = sum(5.5, 3.3);:少数を引数としてsumメソッドを呼び出し、合計値をresult2に代入します。
  • 出力System.out.println("5.5 + 3.3 = " + result2);により、result2の内容(ここでは8.8)が表示されます。
<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    JAVAテキスト&問題集へ戻る
    トップページへ戻る