多重継承とインターフェイス

Java言語では無制限な多重継承は禁止されています。 多重継承の機能は、インターフェイスと呼ばれる特別なクラスによって 実現されます。
 Java言語のプログラムは、クラス定義の集まりとして記述されますが、 特殊なクラスとして「インターフェイス」と呼ばれるものが存在します。 インターフェイスの中に変数やメソッドが記述できる点は、 通常のクラスと同じです。 ただし、変数はすべて static でなければなりません。 また、メソッドはすべて abstract なメソッドである必要があります。 つまりインターフェイスのメソッドは、 すべて名前と型の宣言だけで、中身は定義されないわけです。 この事実を指して、 「インターフェイスは実装を持たないクラスである」という言い方をします。
 abstract なクラスとの違いに注意。abstractなクラスは オブジェクトを生成できないクラスです。この点はインターフェイスとは同じですが、 abstractなクラスの内部には通常の内容が定義された通常のメソッドが含まれていて かまいません。実際、最低1つでも abstract なメソッドを持つクラスは abstractに なります。つまり、インターフェイスは普通の 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の定義の中で 実装する必要があります。
 implementsするインターフェイスは何個あってもかまいません。

public class NewClass implements Interface1,Interface2,Interface3 {
                                    :
                                    :

 インターフェイスによる多重継承の仕組みは 少し「形式的」に思えるかもしれません。 目的の機能を有するクラスを実現する方法は何通りも存在します。 その中には、インターフェイスに頼らない方法を考えることもできるでしょう。 インターフェイスを用いるメリットとして、次のようなことを挙げることが できます。