Java interface インターフェースとは?

インターフェースは、
抽象メソッドと定数だけが定義されたクラスの事です。

抽象クラス・抽象メソッドと同じような使い方をします。
(定数はオマケと言った感じです。)

インターフェースを定義する時は、
キーワードclassの変わりにキーワードinterfaceを使います。

インターフェースには抽象メソッドが存在しますが、
メソッドの先頭にキーワードabstractを付ける必要はありません。
(もちろん、付けても問題ありません。)

同じく、インターフェースの先頭にabstractを付ける必要もありません。

それに加え、抽象メソッドを含むので、
インターフェースのインスタンス化は不可です。

また、インターフェースの抽象メソッドの
標準アクセス指定子は、publicです。

定数も定義できます。
定数なので、static final属性が標準で付加されます。
(もちろん、付けても問題ありません。)

そして、変数ではなく定数なので、初期化が必要です。
また、インターフェースの定数の標準アクセス指定子は、publicです。

インターフェース自体の標準のアクセス指定子は、指定なしです。

そのため、デフォルトでは、パッケージ内に限りアクセス可になります。

もちろん、通常のクラスのようにpublicを付ける事もできます。

インターフェース定義例

interface A {
      int data = 10;            // 定数 初期化が必要。
      public void show();       // 抽象メソッド
}

インターフェースは、
抽象クラス・抽象メソッドと同じく、継承して使います。

しかし、通常のクラスの継承時に使うextendsではなく、
implementsキーワードを使います。

implementsは実装する。と言った意味を持ちます。

Javaではクラスの多重継承(2つの親を持つクラス)が
許されていないので、
複数の抽象クラス・抽象メソッドを継承できません。

そういう場合のためにインターフェース機能があります。

インターフェースなら、いくつでも実装可能です。

例えば、1つのクラスと
3つのインターフェースを継承、実装したクラスをつくれる。

と言った具合です。

もちろん、2つ以上のクラスを継承したクラスは作れません。

インターフェースの実装例

interface A {
      int data = 10;
      void show();
}

class B implements A {
      int dataB;
      void show() {
            中身は省略
      }
}