オブジェクト指向-インターフェース

インターフェース(interface, I/F)とは

インタフェースとは、ものごとの境界となる部分のこと及び境界でのプロトコルを指します。

ものごと同士が情報などのやり取りをする際の界面における円滑化の仕組みを意味します。


現実世界におけるインターフェースの例

PCにおける「USBインターフェイス」が挙げられます。

USBインターフェイスを備えたデバイス(機器)は、PCのUSBポートに接続して使用することができます。

これは、USB規格という共通化された仕様・形状に基づいて設計されたUSBデバイスが、デバイスの情報取得コマンドや操作コマンドに応答できるように作成されているからです。

また、PCからはデバイスを意識することなく、デバイスに対するコマンドを発行することができます。


オブジェクト指向におけるインターフェースとは

オブジェクト指向におけるインターフェースとは、クラスが備えているべき仕様や性質を定義するものです。

インターフェースはクラスに対して「何をするのか」を定義し、どのように実装するかはそれぞれのクラスに任せます。

つまり、どういう方法で処理を実行するかはそのインターフェースを実装する(implements)クラスで決めます。


インターフェースには、メソッドを定義するのみでメソッドの具体的な処理を実装しません。

インターフェースはオブジェクトの役割を表したものであり、複数種類のオブジェクトに共通する機能を実装するためのメッセージ規格を定義するために利用します。

あるインタフェースを実装したクラスは、同一のインタフェースを実装したクラス間でインタフェースで定義された機能の実装を共通して持っていることになります。


インターフェース注意点

  • インタフェースのオブジェクトを生成することはできません。
    • インタフェースは「抽象クラス」と似ていますが、自体をインスタンス化することが出来ません。
  • インタフェースを実装したクラスは必ずメソッドを実装する必要があります。
    • インタフェースを実装した場合、実装したクラスではインタフェースで定義されているメソッド全てを実装しなければなりません。
  • インタフェース内で定義した変数は、定数になり変更することができません。

インターフェースの利点

インターフェースを使うと、クラスやメソッドの再利用性が高まります。

インターフェースが同じならば同じコードをいろいろなクラスに適用できます。


Javaにおけるインターフェースとは

Java言語でのインターフェースとは、メソッドの中身などが存在しないメソッドの宣言文(抽象的なメソッド=Abstract method)とフィールドだけのクラスから構成されます。

インターフェースはclassではなくinterfaceとして宣言され、通常のclassからインプリメントされることにより利用されます。

Javaにおけるインターフェースはクラスではなく、クラスへの要求のセットです。



// 捕食動物を表すインタフェース
public interface Predator {
    // 抽象メソッド
    boolean chasePrey(Prey p); // 餌を追いかける
    void eatPrey(Prey p); // 餌を食べる
}

// Lion implements
public class Lion implements Predator {
    public boolean chasePrey(Prey p) {
        // Lion固有のメソッドの実装
    }

    public void eatPrey (Prey p) {
        // Lion固有のメソッドの実装
    }
}

// Cat implements
public class Cat implements Predator {
    public boolean chasePrey(Prey p) {
        // Cat固有のメソッドの実装
    }

    public void eatPrey (Prey p) {
        // Cat固有のメソッドの実装
    }
}

関連ページ