PHASE2 LOG

主にIT関連・ゲームのログ

Javaのお勉強~オーバーロード(多重定義)~

      2016/03/12

今回はオーバーロードについてお勉強していきます。

聞き慣れない単語だったのでちょっと不安もありますが、がんばっていきましょう(´∀`)

前回の記事も参考にするとなお良しかな?

 

 

オーバーロードとは

 

同一のクラス内に引数の数や型の異なる同じ名前のメソッドを複数記述することを

オーバーロード(多重定義)と言います。

 

ということは、引数の数・型・メソッド名の3つが全く同じだと

オーバーロードできないわけですね。

 

ちなみにこの「引数の数・型・メソッド名」を組み合わせたものをシグネチャというそうです!

  • シグネチャが異なる→オーバーロード可能
  • シグネチャが同じ→オーバーロードできない

 

という認識になりますね。

 

それとオーバーロードのメリットは、同じような処理をするメソッド名が増えすぎて

ソースが煩雑にならないことだと思ってます。

 

オーバーロードの実例

 

例として以下のコードを見てみます。

class Poke{
	String name;
	int level;
	
	void setData(String a, int b){	//名前とレベルをセットします
		name = a;
		level = b;
	}
	
	void show() {	//引数がないのでそのままの値を出力
		System.out.println("名前:" + name + " レベル" + level);
	}
	
	void show(String type) {	//引数をタイプとして出力する
		System.out.println("名前:" + name + " レベル " + level + " タイプ:"+ type);
	}
	
	void show(String c, int d) {	//引数を名前とレベルとして出力する
		name = c;
		level = d;
		System.out.println("名前:" + name + " レベル" + level);
	}
	
}

public class Overload {
	public static void main(String[] args){	
		Poke poke1 = new Poke();
		Poke poke2 = new Poke();
		Poke poke3 = new Poke();
		
		poke1.setData("フシギダネ", 5);
		poke2.setData("フシギソウ", 16);
		poke1.show();	//最初のshow()メソッド呼び出し
		poke2.show("くさ");	//2番めのshow()メソッド呼び出し
		poke3.show("フシギバナ", 32);	//3番めのshow()メソッド呼び出し
	}
}

 

フシギダネのデータを出力しています。

変数poke1では引数を渡さないpoke1.show();という処理が記述されています。

 

引数はない時は3つ同じ名前のshow()メソッドがある中でどれが利用されるかというと、

引数を持たない最初のshow()メソッドが呼ばれます。

 

同一のメソッド名でも引数や型で判断して対応しているメソッドが呼ばれます

 

poke2やpoke3も引数の数と型が異なるので、呼ばれるメソッドが違ってきますね。

これを実行すると、以下のようになります。

名前:フシギダネ レベル5

名前:フシギソウ レベル 16 タイプ:くさ

名前:フシギバナ レベル32

 

どういうデータがセットされて、どのメソッドが呼ばれたのか実際に追ってみると

オーバーロードがどういうものか理解しやすかったですので参考にどうぞ!

人気ブログランキング

 -