【Java】メソッドのオーバーロード(多重定義)のやり方

■メソッドのオーバーロード(多重定義)

メソッドのオーバーロード(多重定義)とは、引数の数やデータ型が異なれば、ひとつのクラス内に同じ名前のメソッドを作成することである。

▼イメージ

class hoge{
    public void hoge_method(){
        処理〇〇
    }

    public void hoge_method(引数1, 引数2){
        処理××
    }
}

※同じ名前のメソッドが存在する場合、ソースgrepを行うと、複数の処理がヒットしてしまい、影響調査量が増えるので、あまり同じ名前のメソッドを作成するのはお勧めしない・・・。

■今回作成するプログラムの仕様

今回はきのこの名前と量を表示するクラスを作成する。

▼処理内容

・きのこの名前と量を表示するクラス

▼フィールド(メンバ変数)
きのこの名前
きのこの量

▼コンストラクタ
きのこの名前を初期化
きのこの量を初期化

▼きのこの名前と量を表示するメソッド(引数なし)
「きのこの名前:(設定した名前)」と出力
「きのこの量:(設定した数)個」と出力

▼きのこの名前と量を表示するメソッド(引数あり:数字フラグ)
数字フラグが「0」ならば
「きのこの名前:(設定した名前)」と出力
数字フラグが「1」ならば
「きのこの量:(設定した数)個」と出力
数字フラグが「0」「1」以外
「0か1を指定してください」と出力


・メインクラス

きのこの名前と量を表示するクラスをインスタンス(引数:シイタケ, 10)
きのこの名前と量を表示するクラスをインスタンス(引数:マイタケ, 50)
それぞれのインスタンスについて、きのこの名前と量を表示するメソッド(引数なし/あり)を呼び出す。

■サンプルコード

// きのこの名前と量を表示するクラス
class MushroomNameSize{
	// メンバ変数の設定
	private String mushroom_name;		// きのこの名前
	private int mushroom_amount;		// きのこの量
	
	// きのこの名前と量を表示するメソッド(引数なしのメソッド)
	public void show_mushroom_data() {
		
		System.out.println("きのこの名前:" + mushroom_name);
		System.out.println("きのこの量:" + mushroom_amount + "個");
	}
	
	// きのこの名前と量を表示するメソッド(引数ありのメソッド)
	public void show_mushroom_data(int num_flg) {
		
		// num_flgが0なら名前を表示
		if(num_flg == 0) {
			System.out.println("きのこの名前:" + mushroom_name);
		
		// num_flgが1なら量を表示
		} else if(num_flg == 1) {
			System.out.println("きのこの量:" + mushroom_amount + "個");
		
		// 0か1以外
		} else {
			System.out.println("0か1を指定してください");
		}
	}
	
	// コンストラクタ
	public MushroomNameSize(String m_name, int m_amount) {
		this.mushroom_name = m_name;
		this.mushroom_amount = m_amount;
	}
}

// メインクラス
public class Sample {

	// メインメソッド
	public static void main(String[] args) {
		// クラスのインスタンス
		MushroomNameSize m_name_size_shiitake = new MushroomNameSize("シイタケ", 10);
		MushroomNameSize m_name_size_maitake = new MushroomNameSize("マイタケ", 50);
		
		// 引数のないメソッドを呼び出す
		System.out.println("###引数なしのメソッド###");
		m_name_size_shiitake.show_mushroom_data();
		System.out.println("###引数なしのメソッド###");
		m_name_size_maitake.show_mushroom_data();
		
		// 引数ありのメソッドを呼び出す
		System.out.println("###引数ありのメソッド###");
		m_name_size_shiitake.show_mushroom_data(0);
		m_name_size_shiitake.show_mushroom_data(1);
		m_name_size_shiitake.show_mushroom_data(2);
		
		System.out.println("###引数ありのメソッド###");
		m_name_size_maitake.show_mushroom_data(0);
		m_name_size_maitake.show_mushroom_data(1);
		m_name_size_maitake.show_mushroom_data(2);
		
	}
	
}

■実行結果

###引数なしのメソッド###
きのこの名前:シイタケ
きのこの量:10個
###引数なしのメソッド###
きのこの名前:マイタケ
きのこの量:50個
###引数ありのメソッド###
きのこの名前:シイタケ
きのこの量:10個
0か1を指定してください
###引数ありのメソッド###
きのこの名前:マイタケ
きのこの量:50個
0か1を指定してください

コメント