インタフェースの宣言(interface)
このページではJavaでのインタフェースの宣言方法について説明します。
インタフェースの宣言
インタフェースの宣言は以下の枠内のフォーマットにより構成されます。interfaceとインタフェース名は必須項目です。
public interface インタフェース名 extends スーパーインタフェース,・・・
修飾子 | 説明 |
---|---|
public | インタフェースのアクセスレベルを指定します。publicがなければインタフェースと同じパッケージ内で定義されたクラスのみからアクセスできることを表します。publicがあれば全クラスからアクセスできることを表します。 |
interface | インタフェースの宣言を意味します。インタフェース宣言時の必須項目です。 |
インタフェース名 | 宣言されたインタフェースのインタフェース名を意味します。インタフェース宣言時の必須項目です。 |
extends | スーパーインタフェース名を継承したい時に使用します。 |
スーパーインタフェース名 | 継承したいスーパーインタフェース名です。スーパーインタフェース名は,(カンマ)により複数宣言することができます。 |
メンバ変数、メソッドの宣言
インタフェース内でメンバ変数を宣言する場合、そのメンバ変数は暗黙的にpublic、static、finalの修飾子が付与されます。final修飾子が付与されることからもインタフェース内で宣言されたメンバ変数は定数と言うことができます。メンバ変数宣言時に明示的にこれらの修飾子を付与する必要はありません。
インタフェース内でメソッドを宣言する場合、そのメソッドは暗黙的にpublic、abstractの修飾子が付与されます。abstract修飾子が付与されていることからもインタフェース内で宣言されたメソッドは抽象メソッドと言うことができます。メソッド宣言時に明示的にこれらの修飾子を付与する必要はありません。抽象メソッドであるため、インタフェース内でメソッドを宣言する場合、メソッドのヘッダー部分のみを宣言します。メソッド本体の定義はインタフェースを実装したクラス内で行います。

インタフェース内でメンバ変数、メソッドを宣言する場合、修飾子としてtransient、volatile、synchronizeを付与することはできません。またアクセスレベルとして、private、protectedを付与することもできません。
【例1】インタフェースの宣言例です。
//インタフェースExInterface2の宣言
interface ExInterface2 {
//引数にdouble型の引数dを持つメソッドexMethodの宣言
void exMethod(double d);
//double型の定数EXMEMBERの宣言
double EXMEMBER = 100.256d;
}
インタフェースとabstractクラスの違い
インタフェースを実装したクラスでメソッドの本体を定義すると言うことを考えると、abstractクラスを継承したクラスでabstractメソッドの本体を定義するというのとよく似ています。インタフェースとabstractクラスには以下に示すような違いがあります。
- インタフェースではどのメソッドも本体を定義することはできませんが、abstractクラスには本体を定義したメソッド(abstractでないメソッド)を含めることができます。
- インタフェースは複数実装できますが、abstractクラスは1つのみしか継承できません(多重継承がサポートされていないため)。
- abstractクラスは継承したクラスとの間にクラス関係を意識する必要がありますが、インタフェースは実装したクラスとの間にクラス関係を意識する必要はありません。
2インタフェースの宣言(interface)