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