クラス定義

ActionScript 3.0 のクラス定義には、ActionScript 2.0 のクラス定義に使用したシンタックスと似たシンタックスを使用します。クラス定義の正しいシンタックスは、class キーワードの後にクラス名が必要です。クラス名の後には、中括弧 ({}) で囲まれたクラスの本体が続きます。たとえば、次のコードは visible という名前の変数を 1 つ含む Shape という名前のクラスを作成します。

public class Shape
{
    var visible:Boolean = true;
}

シンタックスの大きな変更の 1 つに、パッケージ内部にあるクラス定義があります。ActionScript 2.0 では、クラスがパッケージ内部にある場合は、クラス宣言にパッケージ名を含める必要があります。ActionScript 3.0 では、package ステートメントが導入されていますが、パッケージ名はクラス宣言ではなくパッケージ宣言に含める必要があります。たとえば、次のクラス宣言は、flash.display パッケージに含まれている BitmapData クラスを ActionScript 2.0 および ActionScript 3.0 で定義する方法を示します。

// ActionScript 2.0
class flash.display.BitmapData {}

// ActionScript 3.0
package flash.display
{
    public class BitmapData {}
}

サブトピック

クラス属性
クラスの本体

クラス属性

ActionScript 3.0 では、次の 4 つの属性のいずれかを使用してクラス定義を変更できます。

属性

定義

dynamic

実行時にインスタンスにプロパティを追加できます。

final

別のクラスによって拡張することはできません。

internal (デフォルト)

現在のパッケージ内の参照に対して表示されます。

public

すべての場所にある参照に対して表示されます。

internal を除くこれらの属性では、属性を明示的に含めて関連付けられたビヘイビアを取得します。たとえば、クラスを定義するときに dynamic 属性を含めなかった場合、実行時にクラスインスタンスにプロパティを追加することはできません。次のコードに示すように、クラス定義の先頭に属性を配置して、属性を明示的に割り当てます。

dynamic class Shape {}

上記のリストには、abstract という属性は含まれていません。ActionScript 3.0 では抽象クラスをサポートしていないためです。リストには private および protected という属性も含まれていません。これらの属性は、クラス定義内でのみ意味を持ち、クラス自体には適用できません。パッケージの外部でクラスをパブリックに表示しない場合は、パッケージ内にクラスを配置し、internal 属性でクラスを宣言します。または、internalpublic 属性を両方とも省略することができます。この場合は、コンパイラによって internal 属性が自動的に追加されます。クラスが定義されたソースファイルの外部にクラスを表示しない場合は、パッケージ定義の中括弧の下にあるソースファイルの下部にクラスを配置します。

クラスの本体

中括弧で囲まれたクラス本体は、クラスの変数、定数、およびメソッドを定義するために使用します。次の例は、Flash Player API の Accessibility クラスの宣言を示します。

public final class Accessibility
{
    public static function get active():Boolean;
    public static function updateProperties():void;
}

クラス本体内に名前空間を定義することもできます。次の例は、名前空間をクラス本体内に定義し、そのクラスのメソッドの属性として使用する方法を示します。

public class SampleClass
{
    public namespace sampleNamespace;
    sampleNamespace function doSomething():void;
}

ActionScript 3.0 では、クラス本体に定義だけでなくステートメントも含めることができます。クラス本体内部にあるが、メソッド定義の外部にあるステートメントは、クラス定義が最初に認識され、関連付けられたクラスオブジェクトが作成されるときに、1 度だけ実行されます。次の例には、外部関数 hello() と、クラスが定義されたときに確認メッセージを出力する trace ステートメントへの呼び出しが含まれています。

function hello():String
{
    trace ("hola");
}
class SampleClass
{
    hello();
    trace("class created");
}
// クラスが作成されると出力する
hola
class created

旧バージョンの ActionScript とは異なり、ActionScript 3.0 では、同じクラス本体内に同じ名前の静的プロパティとインスタンスプロパティを定義することができます。たとえば、次のコードは、message という名前の静的変数と同じ名前のインスタンス変数を宣言します。

class StaticTest
{
    static var message:String = "static variable";
    var message:String = "instance variable";
}
// スクリプト内
var myST:StaticTest = new StaticTest();
trace(StaticTest.message); // static variable
trace(myST.message);       // instance variable

Flex 2.01