オブジェクト指向の概念4〜インターフェースとは〜

インターフェースについて学習します。
参考サイトはここのページがメニューになっていて、「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);
    }
}

早い話が。。。

インターフェースを実装するクラスは、インターフェースにあるメソッド(抽象メソッド)をオーバーライドすることが強制されるので、必ず対象のメソッドがあると言う意味になります。

つまり、ここの記事に記載したようにcode>@Overrideアノテーションをつけて「オーバーライドしていますよ!」と明示的に示すこともできますし、インターフェースを実装したコマンドクラスを作成していろんなコマンド処理を実装することもできます。
上のコマンド処理に関してはDiscordアプリを作成した時に実装したものです。よく使う技術なのでサンプルに作成しました。

まとめると

インターフェースを実装(implements)下クラスは指定のメソッドを持っているので、複数の「XXX」メソッドを一行で呼び出すことができると言うことです。
詳細に関しては、上の「インターフェースを実装したコマンドクラスを作成」の記事に記載しています。

でわでわ。。。



関連ページ

  1. Java インターフェース 〜Listの使い方、ワンポイントレッスン的な〜
  2. Java インターフェース〜Mapの使い方 ワンポイントレッスン的な〜
  3. Java Basic インターフェース 〜Step2_3 〜