内部クラス3
ローカルクラス
内部クラスには、まだ秘められた機能があります
それがローカルクラスです
Javaは、多種多様な面でクラスを宣言することができます
今回紹介するローカルクラスはスコープ内クラスなのです
つまり、クラスのメンバとしてではなく、クラスのメンバの中のクラスと言えます
通常は、ローカルクラスといえばメソッド内のクラスを言います
そうです、メソッドの内部にクラスを宣言することができるのです
もはやこの時点で、ローカルクラスは外側のクラスのメンバではありません
このクラスが見えるのは同一のスコープ内だけであり、それ意外は見えないのです
次のプログラムは抽象クラスNEKOをインターフェイスとして、ローカルクラスのメンバを実行しています
class test {
public static void main(String args[]) {
top obj = new top();
NEKO rena = obj.getKitty();
rena.write();
}
}
class top {
NEKO getKitty() {
class Kitty extends NEKO {
void write() {
System.out.println("Kitty on your lap");
}
}
return new Kitty();
}
}
abstract class NEKO {
abstract void write();
}
top.getKitty()はNEKOクラスのインスタンスへの参照を返します
しかし、NEKOクラスは抽象クラスなので、直接インスタンスを生成することはできません
そこで、ローカルクラスでNEKOクラスを拡張して、そのクラスのオブジェクトを返しています
testクラスのmain()メソッドからKittyクラスは見えません
そのため、直接testクラスでKittyのオブジェクトを受け取ることはできませんが
KittyはNEKOを拡張しているので、NEKO型の参照を受け取ることができるのです
実際にこのような用途で、GUIやスレッド環境下のプログラムで用いられます
ローカルクラスのインスタンスの生成は、必ず定義したあとに行うようにしてください
ローカルクラスの定義部より上部で行うと、シンボルが解釈されません