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

ながみえ

一つ前のページでは真偽値を返すメソッドについて学習しました。

今回は メソッドのオーバーロード について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:メソッド編

 ・Lesson3-1:メソッドの基本を確認しよう
 ・Lesson3-2:メソッドの戻り値を理解しよう
 ・Lesson3-3:真偽値を返すメソッドを理解しよう
 ・Lesson3-4:メソッドのオーバーロードを理解しよう ◁今回はココ
 ・Lesson3-5:ジェネリクスを理解しよう
 ・確認問題3-☆1:石取りゲームを作ろう
 ・確認問題3-☆2:丁半賭博ゲームを作ろう
Lesson4:コレクション編
Lesson5:クラス

<<前のページ

学習記事一覧

次のページ>>

オーバーロードとは何か|同名メソッドの定義と引数の違いによる使い分け

同じ名前のメソッドでも、引数の型や数を変えることで別々の処理を定義できる仕組みをオーバーロードと呼びます。

オーバーロードを理解すれば、コードを整理しながら柔軟に機能を追加でき、同じ動作のバリエーションを効率よく実装できます。

本記事では、オーバーロードの基本的なルールから、定義方法、引数の違いによる使い分けまでを初心者向けにわかりやすく解説します。

これを学べば、コードの再利用性や可読性を高めながら、多様な入力に対応できるメソッド設計ができるようになるでしょう。

それでは、オーバーロードの世界を一緒に探っていきましょう。

オーバーロードの基本構文|引数の違いで同名メソッドを使い分ける方法

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

これを メソッドのオーバーロード と言います。

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

public class Calculator {
    public static int add(int a, int b) {			// 2つの整数を足すaddメソッド
        return a + b;
    }
    public static double add(double a, double b) {	// 2つの小数を足すaddメソッド
        return a + b;
    }
    public static int add(int a, int b, int c) {	// 3つの整数を足すaddメソッド
        return a + b + c;
    }
    public static void main(String[] args) {	// メインメソッド
        int result1 = add(10, 5);				// 15
      	double result2 = add(1.5, 0.5);			// 2.0
      	int result3 = add(1, 2, 3);				// 6
    }
}

定義した3つのメソッドは全て同じ名前ですが、引数の型や数から自動的に対応するメソッドが選択されています。

これがメソッドのオーバーロードの最も基本的な例です。

オーバーロード可能な条件と注意点|間違いやすいポイントを解説

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

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

次の例を見てください。

public class Example {
    public void display(int a) {		// 1つの引数を持つメソッド
        System.out.println("Integer: " + a);
    }
    public void display(int a, int b) {	// 2つの引数を持つメソッド
        System.out.println("Integers: " + a + ", " + b);
    }
    public void display(String a) {		// 引数の型が異なるメソッド
        System.out.println("String: " + a);
    }
}

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

まとめ|柔軟で再利用性の高いメソッド設計の第一歩

今回の学習では、オーバーロードの基本構文と使い分け方、そしてオーバーロード可能な条件や注意点について学びました。

これにより、同じメソッド名を活用しつつ、引数の違いによって複数の処理を柔軟に実装できるようになります。

コードの可読性や再利用性を高め、効率的なプログラム設計を行えるスキルは、これからのJava学習や開発の現場で大きな力になるでしょう。

ここで得た知識を活かし、さらに幅広いメソッド設計へとステップアップしていきましょう。

練習問題|整数と少数の合計を計算するオーバーロードメソッド

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からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

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

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

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

Q
ヒント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 の計算結果を出力するコードを書いてください。
        */
    }
}

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

練習問題の解答と解説

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
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
    }
}
Q
正解コードの解説

コードをブロックごとに分割して解説します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
  • 出力System.out.println("5.5 + 3.3 = " + result2);により、result2の内容(ここでは8.8)が表示されます。
  • double result2 = sum(5.5, 3.3);:少数を引数としてsumメソッドを呼び出し、合計値をresult2に代入します。
もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいJava学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました