10 章: インタフェース

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

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

インタフェースの特徴

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

1. クラスの継承 (extends) は 1 クラス (単一継承) であるが, インタフェースの実装 (implements) は複数でも可能.
2. インタフェース同士であれば多重継承することも可能.
3. メンバ変数の修飾子は [final public static] のみである. (修飾子の省略は可能であるが, 振る舞いは同じ)

インタフェースの書式

インタフェースの書式は次のようになる:

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

インタフェースの実装

インタフェースを実装するには [implements] を使用する:

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

インタフェースの継承

クラスと違ってインタフェース同士のとき [多重継承] することができる:

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

インタフェースの使用例

Sample1001.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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();
	ifsample.m4();

	If4 ifsample4 = new IfSample(); // インタフェースを参照型として使用できる
	ifsample4.m4();
    }
}

上記のプログラムの実行結果:

[wtopia 10]$ java Sample1001
InterfaceIf1の実装
InterfaceIf2の実装
InterfaceIf3の実装
InterfaceIf4の実装
InterfaceIf4の実装