Java言語のプログラムは、クラス定義の集まりとして記述されますが、
特殊なクラスとして「インターフェイス」と呼ばれるものが存在します。
インターフェイスの中に変数やメソッドが記述できる点は、
通常のクラスと同じです。
ただし、変数はすべて static でなければなりません。
また、メソッドはすべて abstract なメソッドである必要があります。
つまりインターフェイスのメソッドは、
すべて名前と型の宣言だけで、中身は定義されないわけです。
この事実を指して、
「インターフェイスは実装を持たないクラスである」という言い方をします。
インターフェイスの定義を始めるキーワードは class ではなく interface です。
public interface NewInterface {
/** static変数は許される */
public static final int Constant;
/** abstractメソッドのみ許される */
abstract public void firstMethod();
abstract public void secondMethod();
}
インターフェイスを含むソースプログラムのコンパイルの方法は、
通常のクラスのソースプログラムと変わりません。
結果として「インターフェイス名+ .class 」という名前のバイトコードの
ファイルが生成される点も同じです。
インターフェイスはオブジェクトを生成しませんから、それ自身だけでは
機能しません。他のクラスに継承され、そのサブクラスの中で abstractメソッド
が実装されて初めて意味を持つわけです。
Java言語では、複数のクラスからの継承(多重継承)は一般に禁止されています。
ただしインターフェイスからの継承は何個でも許されます。
インターフェイスの性質を継承するためのキーワードが implements です。
implements は extends と同時に指定できます。
public class Pegasus extends Horse implements Flying {
/* インターフェイス Flyingの中のメッソドを実装する */
}
上の例では、新しいクラス Pegasus をクラス Horse とインターフェイス Flying
の両方のサブクラスとして定義します。
インターフェイス Flyingの内部の abstract メソッドは、Pegasusの定義の中で
実装する必要があります。
public class NewClass implements Interface1,Interface2,Interface3 {
:
:
インターフェイスによる多重継承の仕組みは
少し「形式的」に思えるかもしれません。
目的の機能を有するクラスを実現する方法は何通りも存在します。
その中には、インターフェイスに頼らない方法を考えることもできるでしょう。
インターフェイスを用いるメリットとして、次のようなことを挙げることが
できます。