インターフェースは、
抽象メソッドと定数だけが定義されたクラスの事です。
抽象クラス・抽象メソッドと同じような使い方をします。
(定数はオマケと言った感じです。)
インターフェースを定義する時は、
キーワード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() {
中身は省略
}
}