PHASE2 LOG

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

Javaのお勉強~オーバライド~

      2016/03/12

 

今回はオーバーライドとは何かというお勉強です。

前に勉強したオーバーロードと名前が似ていますが、意味は全く異なるようです。

 

オーバーライドとは

 

サブクラスで継承したメソッドと同じ名前、同じ引数のメソッドを記述して

メソッドを上書きすることをオーバーライドといいます。

 

class Game1 {
	void Hard(){
		System.out.println("PSP");
	}
}

//Game1クラスを継承
class Game2 extends Game1 {
	//Game1のHard()メソッドをオーバーライド
	void Hard(){
		//PS Vitaで上書き
		System.out.println("PS Vita");
	}
}

public class Override {
	public static void main(String[] args){
		Game1 a = new Game1();
		a.Hard();
		
		Game2 b = new Game2();
		b.Hard();
	}
}

 

Game1クラスを継承したGame2クラスでは、Hard()メソッドの内容の

「PSP」を「PS Vista」というように上書きしています。

 

ちなみに、オーバーロードの意味をおさらいするとひとつのクラス内で

シグネチャの異なる同じ名前のメソッドを定義できるでしたね!

 

そうなるとオーバーライドとオーバーロード、全く意味が違いますね。

 

superについて

 

サブクラスの中で「super」を使用すると、スーパクラスのメンバを参照することができます。

 

使い方を少し見てみます。

class Hunter {
	String name;
	int HR;
	
	void Print(){
		System.out.println("名前:" + name);
		System.out.println("HR:" + HR);
	}
}

//Hunterクラスを継承
class Rina extends Hunter {
	String weapon;
	
	//HunterクラスのPrint()メソッドをオーバーライド
	void Print(){
		super.Print();	//スーパクラスのメソッドを参照
		System.out.println("武器:" + weapon);
	}		
}

public class Super {
	public static void main(String[] args){
		Rina rina = new Rina();
		rina.name = "RINA";
		rina.HR = 7;
		rina.weapon = "太刀";
		rina.Print();
	}
}

 

 

イメージはこんな感じです。

override

 

実行結果はこうなります。

名前:RINA

HR:7

武器:太刀

名前とHRがsuperを使ってスーパクラスのPrint()メソッドを参照した結果ですね。

武器はサブクラスでPrint()メソッドをオーバーライドした結果です。

 

私は図解したおかげで意味がわかりました(笑)

イメージに落とすのはけっこうイイ方法だと思います!

 

人気ブログランキング

 -