PHASE2 LOG

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

Javaのお勉強~多態性(ポリモーフィズム)~

      2016/03/12

今回は多態性とは何かというお勉強です。

これまでに勉強してきた継承がポイントみたいですね。

 

 

多態性とは

 

継承したクラスのオブジェクトは、スーパクラスとサブクラスのどちらともみなすことが

できます。

 

図にするとこんな感じですね。

tataisei1

 

Musicクラスを継承したBMクラスからインスタンス化を行います。

すると、そのオブジェクトはスーパクラスであるMusicクラスのオブジェクトでもあり、

サブクラスであるBMクラスのものでもあるということです。

 

このように1つのオブジェクトやメソッドが多くの形態を持つこと

多態性(ポリモーフィズム)といいます。

 

スーパクラスへオブジェクトを代入する

 

サブクラスのオブジェクトはスーパクラスのオブジェクトへ代入することができます。

 

実際の例がこちらです。

//スーパクラス
class Music{
	String name;
	int member;
}

//サブクラス
class BM extends Music{
	int No = 0;
	
	void play(){
	}
}

public class Tataisei {
	public static void main(String[] args){
		//スーパクラスのオブジェクト
		Music music = new Music();
		//サブクラスのオブジェクト
		BM babymetal = new BM();
		
		//メンバーに3を設定
		babymetal.member = 3;
		//スーパクラスのオブジェクトにサブクラスのオブジェクトを代入
		music = babymetal;
		
		//サブクラスのオブジェクトをスーパクラスのオブジェクトへ代入は不可
		//babymetal = music;
	}
}

 

 

スーパクラスのオブジェクトであるmusicに、サブクラスのオブジェクトであるbabymetalを

代入することができていますね。

babymetal = music;」の部分でフィールドmemberの値を「3」で上書きしています。

 

ところが反対に「music = babymetal;」のようにスーパクラスのオブジェクトを

サブクラスへ代入しようとするとエラーになってしまいます。

 

さっきの図で表すとこんな感じです。ちょっとごちゃごちゃしてます…w

tataisei2

 

逆はできないんですね~…

  • 代入OK:サブクラスのオブジェクト→スーパクラスのオブジェクト
  • 代入NG:スーパクラスのオブジェクト→サブクラスのオブジェクト

 

理由まではちょっとわからなかったので分かる方いれば教えて下さい(´・ω・`)

 

 

人気ブログランキング

 -