AS3で1ファイルに複数のクラスを定義する方法

ActionScript 3.0 で1つの as ファイルにつき、複数クラスを定義する方法について調べてみました。

パッケージ宣言内にはクラス・関数・変数・名前空間のうち、1つしか含められません。そして、その名前はファイル名と同じでなければなりません。


具体的な例を元に説明してみましょう。

// test/SampleClass.as
package test
{
	public class SampleClass
	{
		// SampleClass の定義
	}
}

class foo
{
	// foo の定義
}

function bar():void
{
	// bar の定義
}

この例では、package test{...} の中に1つのクラスがあり、クラス名 SampleClass がファイル名の SampleClass.as と同じです。package test{...} の中に他のクラスや関数、変数、名前空間を含めることはできません。

残りの定義は package test{...} の外で行っています。foo クラスや bar 関数のように、いくつでも定義できますが、ファイル外からは一切参照できない点に注意してください。


まとめると、

  • 別ファイルに公開するクラスや関数は、パッケージ宣言に書く
  • パッケージ宣言は1つのソースファイルにつき、クラス・関数・変数・名前空間のうち、ただ1つの定義しか含めることができない

となります。


パッケージの public や internal も絡みあうと複雑なので、図にまとめてみました。

パッケージ内の public なクラスはどこからでも参照できる
パッケージ内では public/internal のクラスで相互参照できる
同じファイル内のクラスは参照できる

注意すべきは...

class _I から class I は参照できない
class _I は package sample とは別のパッケージに存在するため、package sample の internal なクラスの参照に失敗する。
別のパッケージ(Test.as)からは class P のみ参照できる
internal なクラスおよびパッケージ宣言外で宣言されたクラスは参照できない。

続編を書きました。