Top | Contents | Prev | Next
クラスの属性

 ActionScript3.0ではクラスを定義する際に属性を選択して定義する事ができます。この属性を定義する事によりクラスの性質が変更されます。ここではクラスの属性と種類に関しての説明をします。

クラスの属性の種類
 クラスの属性の種類は4種類ありそれぞれ内容が異なります。それぞれの属性に関して例で説明していますので見てください。初めての方はpublic属性を理解するだけでもいいと思います。

属性 定義
public public属性で定義したクラスはどこからで参照可能なクラスになります。
internal(初期状態) デフォルトの状態ではinternal属性でクラスが定義されています。この属性は現在のパッケージ内のみ参照できます。
dynamic dynamic属性で定義されたクラスは、クラスのインスタンスを作成した時にメソッド、プロパティの追加を行う事ができるクラスになります。
final final属性で定義した場合、別のクラスによって継承して拡張する事のできないクラスになります。

public属性(パブリック)
 public属性でクラスを定義する方法はpublic属性、クラスキーワード、クラス名の順に記述します。書式は以下の通りです。慣れないうちはクラスはpublic属性で定義するとよいと思います。

書式:
public class SampleClass

・public属性で定義されているクラスなら、パッケージの外のflaファイル、クラス定義スクリプトからアクセスできます。下のコードはSampleClassのインスタンスを作成するコードです。SampleClassの属性がpublicなのでエラーが起きずインスタンスを作成する事ができます。
var myObj:SampleClass = new SampleClass;

internal 属性(インターナル)
 internal 属性はクラス定義時のデフォルトの状態です。つまり何も指定しない場合はinternal属性となります。パッケージの外のflaファイル、クラス定義スクリプトからアクセスできませんが、この属性のクラスは同じパッケージ内での参照は可能です。(下で説明)internal 属性でクラスを定義する方法はinternal 属性、クラスキーワード、クラス名の順に記述します。書式は以下の通りです。

書式1:
internal class SampleClass

書式2:(属性指定なし)
class SampleClass

 internal属性は同じパッケージ内で参照可能と上記で説明しました。例えば一つのパッケージがあり、その中に2つのクラスがあるとします。internal属性のクラスなら、パッケージ外のFlaファイルからアクセスができずインスタンスの作成を行う事も出来ませんが、パッケージ内のクラスからはそれが可能です。次の例を見てください。

・MyPkというパッケージがあり、その中にはSampleClassとSampleClass2があります。そしてそれぞれインスタンスメンバーが定義されています。今回この2つのクラスの属性はSampleClassはinternal、SampleClass2はpublicと定義しています。流れとしてはSampleClass2からSampleClassへアクセスしてSampleClassのインスタンスを作成してパッケージ外のFlaファイルからpublic属性であるSampleClass2へアクセスして結果を表示させます。

つまり簡単に説明するとSampleClass2を利用してSampleClassへアクセスしてFlaファイルで呼び出すという事です。

[SampleClass.as]
package myPk
{
	class SampleClass
	{
		var myNum:uint = 3;
	}
}

[SampleClass2.as]
package myPk
{
	public class SampleClass2
	{
		public function myFunc2()
		{
			var myObj:SampleClass = new SampleClass;
			trace(myObj.myNum);
		}
	}
}

・SampleClassにはFlaファイルからアクセス出来ないので、public属性で定義してあるSampleClass2を利用してSampleClassにアクセスします。下のコードはパッケージmyPkをimportステートメントで呼び出しSampleClass2のインスタンスメソッドmyFunc()を呼び出す為にSampleClass2のインスタンスを作成し、最後にSampleClass2内で定義されたインスタンスメソッドmyFunc2()を呼び出しています。

[SampleClass.fla]
import myPk.SampleClass2;
var foo:SampleClass2 = new SampleClass2();
foo.myFunc2();

Ctrl + Enter キー (Windows) または Command + Enter キー (Macintosh) を押して出力をみてみましょう。

出力結果は3になります。

dynamic属性(ダイナミック)
 dynamic属性で定義されたクラスは、インスタンスに後からメソッド、プロパティを追加する事ができます。dynamic 属性でクラスを定義する方法はdynamic属性、クラスキーワード、クラス名の順に記述します。書式は以下の通りです。この属性はpublic属性と一緒に定義する事が出来ますので、その時はpublic dynamicと続けて修飾します。(順番はどちらでもOK)

書式1:
dynamic class SampleClass

書式2:(publicと一緒に定義)
public dynamic class SampleClass

・下の例ではdynamic属性で定義されたクラスに後からクラスのインスタンス作成を行いメソッド、プロパティを追加する説明を行います。
下のSampleClass.asのコードはメンバーが定義されていない空のクラスです。

[SampleClass.as]
package 
{
	public dynamic class SampleClass
	{
	}
}

・次にSampleClassクラスのインスタンスを作成してインスタンスメンバーmyNumを追加します。

[SampleClass.fla]
var myObj:SampleClass = new SampleClass();
myObj.myNum = 18;

・もしもこのSampleClassがdynamic属性で定義されていない場合、上記の様に新しいプロパティを追加しようとしても、エラーが起きます。

final属性(ファイナル)
 final属性で定義されたクラスはサブクラス化する事ができません。例えばfinal 属性で定義されている グラフィック関係のメソッドが定義されているGraphics クラスはfinal属性で定義されているため拡張する事ができません。
トップへ
Top | Contents | Prev | Next