内部クラス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やスレッド環境下のプログラムで用いられます
ローカルクラスのインスタンスの生成は、必ず定義したあとに行うようにしてください
ローカルクラスの定義部より上部で行うと、シンボルが解釈されません



前のページへ戻る次のページへ