PV3Dのクラスを読んでたらよくわからない書き方があったので、テストしてみた。

たとえばこんなドキュメントクラスがあった場合に、

package  {
	import flash.display.Sprite;
	
	/**
	 * ...
	 * @author 393
	 */
	public class Test extends Test2 {
		
		public function Test() {
			trace(spriteObj.getRect(this)) //出力(x=0, y=0, w=100, h=100)
		}
        public function get spriteObj():Sprite{
                return sp;
        }
	}
	
}

このコンストラクタでは、spriteObjというものに対して、getRectメソッドを実行させている。
だけども、どこにも var spriteObj という記述は無い。
でも下を見ると、getterでspriteObj というものが定義されている。
これで、spriteObj というものは使えることができるということらしい。

で、getterの中をみると、spを返すことになっている。
これまた、var spという記述はどこにもない。
じゃあ、どこを探すかといえば、Testクラスが継承している、Test2クラスを探してみる。

Test2クラスはこんな感じ。

package  {
	import flash.display.Sprite;
	
	/**
	 * ...
	 * @author 393
	 */
	public class Test2 extends Sprite {
		
		protected var sp:Sprite;
		
		public function Test2() {
			sp = new Sprite();
			sp.graphics.drawRect(0,0,100,100)
		}
		
	}
	
}

ここでspが定義されてるのがわかる。
さらに、protectedで定義されているので、Testクラスからでもアクセスできることがわかる。
(privateだとアクセスできないね)
で、spはSpriteクラスなので、getRect()メソッドが使えるとういわけだ。

ポイントはgetterの場合は、var spriteObj で定義してなくてもOKってことかしら。