045-インターフェース-インターフェースとポリモーフィズム 【新人エンジニアが最初に覚えたい100のJava文法】

Print Friendly, PDF & Email

ユーチューブ動画

インターフェースとポリモーフィズムについて解説します。

ソースコード

interface Special {
	int SPECIAL_POINT_BASE = 10;
	void showSpecial();
}
class Note implements Special{
	public void showSpecial() {
		System.out.println((SPECIAL_POINT_BASE * 2) + "point");
	}
}
class Ball implements Special{
	public void showSpecial() {
		System.out.println(SPECIAL_POINT_BASE + "point");
	}
}
public class MainClass{
	public static void main(String[] args) {
		Special item = new Note();
		Special item2 = new Ball();
		item.showSpecial();
		item2.showSpecial();
	}
}

 

 

解説

インターフェースとポリモーフィズムについて解説します。

 

継承でもポリモーフィズムを実現できますが、インターフェースでも実現することができます。

Javaは単一継承ですから、インターフェースを利用した方が柔軟性があり、メリットがあるといえます。

 

サンプルコードで確認しましょう。

インターフェースSpecialが定義されています。

インターフェースでは、定数と抽象メソッドが定義できます。

定数として、SPECAIL_POINT_BASE=10、抽象メソッドとして、showSpecialメソッドが定義されています。

インターフェースを実装している側は、NoteクラスとBallクラスです。

これだけすでにSPECAIL_POINT_BASEという定数がクラス内で利用できるようになります。

定数を使い回しするときにもインターフェースが便利ですね。

 

さて、インターフェースを実装すると、抽象メソッドをオーバーライドしなければいけないというルールが発動されます

よって、2つのクラスでは、オーバーライドされています。

Noteクラスでは、定数を2倍にした形、Ballクラスでは、定数を表示した形になっています。

 

インターフェースを実装すると、インターフェースをデータ型にした変数に代入することができるようになります

すると、NoteクラスとBallクラスのインスタンスは、同じくSpecialというデータ型の変数に代入することができます。

さらに、インターフェースで定義された抽象メソッドにアクセスすることができます。

よって、item.showSpecial()、item2.showSpecial()とアクセスできます。

インターフェースの変数は、インターフェースで定義された範囲でしかアクセスできないという点を押さえておきましょう。

実行してみましょう。

結果は、Noteクラス側のitem.showSpecial()が20point,、Ballクラス側のitem2.showSpecial()が10pointと表示されます。

ポリモーフィズムによって、同じメソッドで振る舞いを変えることができたということになります。

いかがでしたか?

インターフェース・オーバーライド・ポリモーフィズムはセットで覚えてしまいましょう。

以上、インターフェースとポリモーフィズムについて解説しました。

 

 

このサンプルコードをJavaタッチタイプゲームとして遊ぶことができます。