特徴
・インスタンス化はできず、利用する場合は実現クラスを作成する。
・実現クラスを定義するときは「implements」を利用する。
・実現クラスではインタフェース内の抽象メソッドをオーバーライドして利用する。
・サブインタフェースを作成する場合は「extends」を利用する。
変数
暗黙的に「public static final」修飾子が付与される。
変数宣言時に初期化しておく必要がある。
interface InterfaceA {
int a = 1;
int b; // 初期化していないためコンパイルエラー
private int c = 2; //privateのためコンパイルエラー
}
抽象メソッド
・暗黙的に「public abstract」修飾子が付与される。
・実現クラスでオーバーライドする必要がある。
・実現クラスでオーバーライドする前提のため「final」修飾子は付与できない。
interface InterfaceB {
public int testA();
abstract int testB();
private int testC(); //privateのためコンパイルエラー
public static testD(); //staticのためコンパイルエラー
public final testE(); //finalのためコンパイルエラー
}
具象メソッド
・具象メソッドで付与できる修飾子は「private static」「public static」「public default」「private」である。
・Objectクラスの「toString()」「hashCode()」「equals(Object)」はdefaultメソッドとして定義できない。
・defaultメソッドは暗黙的に「public」修飾子が付与される。
interface InterfaceC {
private static int methodA(){return 1;};
public static int methodB(){return 2;};
public default int methodC(){return 3;};
private int methodD(){return 4;};
//public int methodE(){return 5;}; //publuc defaultでないためコンパイルエラー
//private default methodF(){return 6;}; //publuc defaultもしくはprivateのみでないためコンパイルエラー
}