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

ユーチューブ動画

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

ソースコード

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タッチタイプゲームとして遊ぶことができます。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。