インターフェイス型
インターフェイスの参照
インターフェイス型の変数を生成することによって、インターフェイスを参照することができます
インターフェイスの参照は、やはりJavaのポリモーフィズムの重要な機能です
インターフェイス型の変数に代入できるのは
そのインターフェイスを実装しているクラスのオブジェクトのみです
つまり、変数の型になっているインターフェイスをimplementsしているオブジェクトでなくてはいけません
インターフェイスの参照は、オブジェクトの参照と同様の扱いができます
ただし、インターフェイス型変数を通して参照されるメソッドや変数は、そのインターフェイスで宣言されているものだけです
それ以外のメソッドや変数へのアクセスはできません
interface NARU {
String name = "成瀬川なる";
int age = 17;
void write(String str , int age);
}
class LOVE_HINA implements NARU {
char blood_type = 'A';
public void write(String str , int age) {
System.out.println(str + "\t" + age);
}
}
class test {
public static void main(String args[]) {
NARU naru = new LOVE_HINA();
System.out.println("名前\t\t年齢");
naru.write(naru.name , naru.age);
}
}
NARU naru = new LOVE_HINA() に注目してください。これは
NARU naru;
naru = new LOVE_HINA();
と同じ動作ですね
NARUはインターフェイスの名前ですね
つまり、これはNARUインターフェイス型の変数なのです
この変数に代入できる参照は、先ほども説明したとおりです
NARUインターフェイスをインプリメントしているクラスのコンストラクタ
もしくは、その拡張クラスのコンストラクタです。それ以外は代入できません
このインターフェイスという存在と、インターフェイス型は
インターフェイスで宣言されているメンバの定義が保証されているというの重要な意味があります
(だから、インターフェイスをインプリメントすると必ず実装しなければならない)
インターフェイスはインスタンス化できないので、それをインプリメントしたクラスや
インターフェイス型にオブジェクトをキャストするなどしてインターフェイス型の参照を生成します
これは、グラフィカルプログラムのイメージ操作などでは、頻繁に使用される技術です