インターフェースについて学習します。
参考サイトはここのページがメニューになっていて、「What Is an Interface?」
余談
最近は、すっかり忘れていたのですが年末が近づき、記載したものを見直していたところ。。。中途半端な記事を見つけたので、キリよく締める方向に向かっていこうと考えています。
インターフェースとは
既に学んだように、オブジェクトは公開するメソッドを介して外界との相互作用を定義します。メソッドは、外界とのオブジェクトのインターフェースを形成します。たとえば、テレビの前面にあるボタンは、プラスチックケースの反対側にある電気配線とユーザーとの間のインターフェイスです。「電源」ボタンを押して、テレビのオンとオフを切り替えます。
最も一般的な形式では、インターフェイスは空のボディを持つ関連メソッドのグループです。自転車の動作は、インターフェイスとして指定されている場合、次のように表示されます。
<インターフェース>
interface Bicycle { // wheel revolutions per minute void changeCadence(int newValue); void changeGear(int newValue); void speedUp(int increment); void applyBrakes(int decrement); }
このインターフェイスを実装するには、クラスの名前が(たとえばのような特定の自転車ブランドに)変更され、クラス宣言でキーワードをACMEBicycle使用しますimplements。
<実装クラス>
class ACMEBicycle implements Bicycle { int cadence = 0; int speed = 0; int gear = 1; // The compiler will now require that methods // changeCadence, changeGear, speedUp, and applyBrakes // all be implemented. Compilation will fail if those // methods are missing from this class. void changeCadence(int newValue) { cadence = newValue; } void changeGear(int newValue) { gear = newValue; } void speedUp(int increment) { speed = speed + increment; } void applyBrakes(int decrement) { speed = speed - decrement; } void printStates() { System.out.println("cadence:" + cadence + " speed:" + speed + " gear:" + gear); } }
インターフェースには以下のメソッドが定義されています。
1.changeCadence
2.changeGear 3.speedUp 4.applyBrakes
これらのメソッドを実装するクラスACMEBicycleでは上記のメソッドをオーバーライドして、書の中身を実装します。
こうする事で、インターフェースを実装するクラスが複数ある場合には、ACMEBicycle以外にもxxBicycleの様に色々なクラスを作成でき、インターフェースに定義しているメソッドを呼び出す事が出来ます。
つまりは、中身の違う処理(メソッド)を1つのメソッド呼び出しで実行する事が出来ます。下にコマンドインターフェース(自作のインターフェース)を実装した時の記事リンクをつけておきます
Java OpenCV 〜背景除去、輪郭を学習する準備4:コマンドで起動する実装〜
早い話が。。。
インターフェースを実装するクラスは、インターフェースにあるメソッド(抽象メソッド)をオーバーライドすることが強制されるので、必ず対象のメソッドがあると言う意味になります。
つまり、ここの記事に記載したようにcode>@Overrideアノテーションをつけて「オーバーライドしていますよ!」と明示的に示すこともできますし、インターフェースを実装したコマンドクラスを作成していろんなコマンド処理を実装することもできます。
上のコマンド処理に関してはDiscordアプリを作成した時に実装したものです。よく使う技術なのでサンプルに作成しました。
まとめると
インターフェースを実装(implements)下クラスは指定のメソッドを持っているので、複数の「XXX」メソッドを一行で呼び出すことができると言うことです。
詳細に関しては、上の「インターフェースを実装したコマンドクラスを作成」の記事に記載しています。
でわでわ。。。