packageの外からのクラス生成

【Main.as】
package {
	import flash.display.*;

	public class Main extends MovieClip {
		public function Main() {
			var c1:class1 = new class1();
			var c2:class2 = new class2();
		}
	}
}

class class1 {
	public function class1() {}
}

【class2.as】
package {
	public class class2 {
		function class2() {
			//var c1:class1 = new class1(); ←コンパイルエラー
		}
	}
}

classの下にclassはネストできないので、ちょこっとした処理のクラスを作りたい場合はpackageの外にかく。これでそのファイル内でしかアクセスできないようになる。


Mainからclass1は生成できるが、class2からclass1の生成は出来ないのでちゃんと隠蔽できている。外部のpackageを読み込むときの注意として

import flash.display.*;
package {

この位置におくとコンパイルエラーとなる。

package {
  内部の処理
}

import flash.display.*;
class class1 extends MovieClip {
	public function class1() {}
}

この位置におけば大丈夫。これはちょこっと処理をまとめたいときに重宝するなり。まぁむしろクラスのネストを許可しろよと言いたいw