インタフェース

インタフェースとは定数を指定したメンバ変数と抽象メソッドのみで構成されるもので、クラスに実装して使用します。

またクラスを継承したときと同様、インタフェースを実装したクラスはそのインタフェースを参照型として使用することができます。


インタフェースの特徴

インタフェースは抽象メソッドを定義している事から一見抽象クラスに似ていますが、クラスとは次の点が異なります。

  1. クラスの継承(extends)は1クラス(単一継承)ですが、インタフェースの実装(implements)は複数でも可能です。
  2. インタフェース同士であれば多重継承することも可能です。
  3. メンバ変数の修飾子は「final public static」のみです。(修飾子の省略は可能ですが、振る舞いは同じです。)
  4. メソッドは必ず抽象メソッドであり修飾子は「abstract public」のみです。(修飾子の省略は可能ですが、振る舞いは同じです。)

インタフェースの書式

インタフェースの書式は次のようになります。

[public] interface インタフェース名 {
}

インタフェースの実装

インタフェースを実装するには「implements」を使用します。

class クラス名 implements インタフェースリスト {
    インタフェースで定義されている抽象メソッドの実装;
}

▲PageTop

インタフェースの継承

クラスと違ってインタフェース同士のとき「多重継承」することが出来ます。

[public] interface インタフェース名 extends 親インタフェースリスト {
}

▲PageTop

インタフェースの使用例

動作確認としてサンプルを挙げておきます。


・サンプルソース(Sample1001.java)

interface If1 {
    String s1 = "If1"; // 修飾子を省略していますが「final public static」となります。
    void m1(); // 修飾子を省略していますが「abstract public」となります。
}

interface If2 {
    String s2 = "If2";
    void m2();
}

interface If3 extends If1, If2 { // 多重継承できます。
    String s3 = "If3";
    void m3();
}

interface If4 {
    String s4 = "If4";
    void m4();
}

class IfSample implements If3, If4 { // 複数のインタフェースを実装できます。
    public void m1() {
        System.out.println("Interface "+ s1 +" の実装");
    }
    public void m2() {
        System.out.println("Interface "+ s2 +" の実装");
    }
    public void m3() {
        System.out.println("Interface "+ s3 +" の実装");
    }
    public void m4() {
        System.out.println("Interface "+ s4 +" の実装");
    }
}

public class Sample1001 {
    public static void main(String[] args) {
        IfSample ifsample = new IfSample();
        ifsample.m1();
        ifsample.m2();
        ifsample.m3();
        If4 ifsample4 = new IfSample(); // インタフェースを参照型として使用できます。
        ifsample4.m4();
    }
}

・実行結果

C:\dev\java>javac Sample1001.java [Enter]

C:\dev\java>java Sample1001 [Enter]
Interface If1 の実装
Interface If2 の実装
Interface If3 の実装
Interface If4 の実装
        

▲PageTop