2007年10月15日月曜日

インターフェース

インターフェースの目的は抽象クラスと似ていますがすべてのメソッドが abstract です。
インターフェースのメソッドは中身を実装しません。したがってインターフェースの役割は、それを実装するクラスの方向性を定め柔軟な設計を可能にすると言うことができます。

インターフェースの変数
public static final でなければならい。省略は可能でコンパイラが補足する。
インターフェースの変数は「定数」として利用できる。

インターフェースのメソッド
public abstract でなければならない。省略は可能でコンパイラが補足する。

インターフェースの定義
interface で定義します。

インターフェースの実装
implements で定義します。
複数のインターフェースを実装できます。


インターフェースは他のインターフェースを継承できます。
インターフェースAを継承するインターフェースαを実装しているサブクラスはインターフェースαのメソッドだけでなくインターフェースAのメソッドも実装しなければならない。


<サンプル>

interface Human {
    void speak();
}
class Japanese implements Human{
    public void speak() {
        System.out.println("こんにちは");
    }
}
class English implements Human {
    public void speak() {
        System.out.println("Hello");
    }
}
public class Sample {
    public static void main(String[] args) {
        Human person1 = new Japanese();
        Human person2 = new English();
        person1.speak();
        person2.speak();
    }
}

<出力結果>
こんにちは
Hello


Human クラスを実装(implements)するサブクラスは必ず speak メソッドを実装しなければなりせん。
Human インターフェースを実装することで Japanese クラス、English クラスは同じ特性を持つことになります。


person1.speak();
person2.speak();
ではそれぞれ Japanese クラスと English クラスでオーバーライドされた speak メソッドが呼び出されています。
これは「多様性」といいます。

0 件のコメント: