AS3のインナークラスについて。
端的に書くと、次のような構文でOK。
package innerclasstest{ public class InnerClassTest extends Sprite { public function test():void { var inner:InnerClass = new InnerClass(); trace(inner.test("test")); } } } class InnerClass{ public function test(t:String):String{ return t; } }
ポイントは以下の通り。
・インナークラスは、パッケージ宣言の外に記述する。
・publicとしては宣言できず、宣言したasファイル内でのみ使用できる。
・親元のクラスはデフォルトでは参照できない(上記だとInnerClassからInnerClassTestの変数へは直接アクセスできない。
(Javaでいう暗黙的な親宣言がない為、参照を渡す必要がある)
・参照を渡しても、お互いのprivate変数には触れない
Javaほどインナークラスが使いやすいわけではないようだ。一番痛いのは親元を
参照できないこと。
ボタンの各イベントをインナークラスに分けるというような使い方はいいかもしれないけど。
追記
package innerclasstest{ public class InnerClassTest2 implements InnerInterface { public function execute1():void{ trace("execute1"); new InnerClass().execute1(); } public function execute2():void{ trace("execute2"); new InnerClass().execute2(); } } } interface InnerInterface{ function execute1():void; function execute2():void; } class InnerClass implements InnerInterface{ public function execute1():void{ trace("inner execute1"); } public function execute2():void{ trace("innner execute2"); } }
これはOKっぽいです。
ここのInnerInterfaceを動的に作ってfunctionだけその場で書ければ
いいんですが、探したところそういう機能はないっぽいですね(JavaのProxyみたいなやつ)
Flex2のProxyはちょっと用途が違うようで。