importの構成

どうやってasの管理をしてるんだろう


[project]>test.fla
[project]>[com]>[test]>[Main]>Import.as
[project]>[com]>[test]>[A]>A.as
[project]>[com]>[test]>[B]>B.as


test.flaからImport.asを、
com.test.Main.Import
的にドキュメントクラスに指定する。
そのImport.asは

package com.test.Main{
	
	import com.test.A.A;
	import com.test.B.B;
	
	import flash.display.Sprite;

	public class Import extends Sprite
	{
		public function Import()
		{
			
			trace("import")
			
			var a:A = new A(this)
			a.hoge()
			
			var b:B = new B
			b.oyaHoge()
			b.hoge()
			
		}
		
		// インスタンスメソッド
		public function test_1():void
		{
			trace("1")
		}
		
		// クラスメソッド
		static public function test_2():void
		{
			trace("2")
		}
	}
}

これでAやBをnewできる。
そのためにimportでは絶対パスみたいに.flaファイルからの視点で参照を書く。

又、A.asでは内部のインスタンスメソッドからクラスメソッドにアクセス出来る。
けども、もちろん外部でnewされたインスタンスメからはクラスメソッドにアクセス出来ない。
ちなみに、Importのクラスメソッドに(import で参照していないのに)Aからアクセス出来る。


さらに、ImportのクラスメソッドにはAのクラスメソッドとインスタンスメソッドのどっちからもアクセス出来る。
けど、ImportのインスタンスメソッドはAのインスタンスメソッドからしかアクセス出来ない。

package com.test.A
{
	import com.test.Main.Import;
	
	public class A
	{
		
		public var parent_:Import
		
		public function A($main:Import)
		{
			parent_ = $main
		}
		
		// インスタンスメソッド
		public function hoge()
		{
			trace("A")
			superHoge()
			parent_.test_1()
		}
		
		// クラスメソッド
		static public function superHoge():void
		{
			trace("superHoge")
			Import.test_2()
		}
	}
}


又、BではHogeBaseを継承して

package com.test.HogeBase
{
	public class HogeBase
	{
		public function HogeBase()
		{
			trace("hogeBase")
		}
		
		public function oyaHoge():void
		{
			trace("oyaHoge")
		}
	}
}
package com.test.B
{
	import com.test.HogeBase.HogeBase;
	
	public class B extends HogeBase
	{
		public function B()
		{
			
		}
		
		public function hoge():void
		{
			trace("B")
		}
	}
}

trace結果が
 import
 A
 superHoge
 hogeBase
 oyaHoge
 B
となり、Bでsuper()をしていなくても親クラスのコンストラクタを実行していた。


まとめ
インスタンスを作るにはimportでasを参照しないといけない。
・静的系はimportしなくてもどこからでも利用できちゃう。