今回はインターフェースについて説明します。
◆インターフェースとは
インターフェースとはオブジェクトを簡単に操作できるようにするための統一された仕様のことです。
使われる側のオブジェクトが操作する側に公開する操作をまとめた仕様、これがインターフェースです。
例としてリモコンのボタンが挙げられます。
今日様々な会社から録画再生機器が発売され、それぞれにリモコンがついています。
それらのリモコンは形は異なるものの、再生ボタンや録画ボタンのマークは統一されています。
この統一されたマーク(操作する機能)がインターフェースです。
では実際にプログラム上でインターフェースをみてみましょう。
interface MyInterface {<br /><%%KEEPWHITESPACE%%> String msg = "インターフェースで定義された変数です";<br /><%%KEEPWHITESPACE%%> void met();<br />}<br /><br />class Imp1 implements MyInterface {<br /><%%KEEPWHITESPACE%%> public void met() {<br /><%%KEEPWHITESPACE%%> System.out.println("Imp1 : " + msg);<br /><%%KEEPWHITESPACE%%> }<br />}<br /><br />class Imp2 implements MyInterface {<br /><%%KEEPWHITESPACE%%> public void met() {<br /><%%KEEPWHITESPACE%%> System.out.println("Imp2 : " + msg);<br /><%%KEEPWHITESPACE%%> }<br />}<br /><br />public class InterfaceSample {<br /><%%KEEPWHITESPACE%%> public static void main(String[] args) {<br /><%%KEEPWHITESPACE%%> Imp1 i1 = new Imp1();<br /><%%KEEPWHITESPACE%%> Imp2 i2 = new Imp2();<br /><%%KEEPWHITESPACE%%> i1.met();<br /><%%KEEPWHITESPACE%%> i2.met();<br /><%%KEEPWHITESPACE%%> }<br />}実行結果
Imp1 : インターフェースで定義された変数です
Imp2 : インターフェースで定義された変数です◆解説
1~4行目
インターフェイスの定義。
String型の変数msgと、抽象メソッドのmet()が定義されています。6~16行目
Imp1クラスにMyInterfaceインターフェースを実装しています。
そのために必要なのが「implements」キーワードです。クラス名 implements インターフェース名
という構文になります。
クラスにインターフェースを実装すると、インターフェース内で定義した変数やメソッドが使えるようになります。
しかしインターフェースで定義できるメソッドは抽象メソッドのみとなっていますので、実装したクラスでオーバーライドする必要があります。
Imp1クラスとImp2クラスではそれぞれのクラス名と変数msgを出力する処理としています。20~23行目
実装クラスをインスタンス化してmet()メソッドを呼び出しています。
するとImp1からもImp2からも同じメソッド名で呼び出すことができています。
そして変数msgも両方から呼び出すことが実行結果から確認できます。
つまり、同じインターフェースを実装したクラスは同じ操作で扱うことができるようになるのです。◆まとめ
・同じインターフェースを実装したクラスのオブジェクトは別クラスでも同じ操作で扱うことができるようになる。
・インターフェースをクラスに実装するにはimplementsキーワードを使用する。