クラスメンバーについて

この章でこれまで説明してきた大半のメンバー (メソッドおよびプロパティ) は、"インスタンスメンバー" です。各インスタンスメンバーには、クラスの個々のインスタンスごとに一意のコピーが存在します。たとえば、Sample クラスの場合、各人物の電子メールアドレスは異なるので、email メンバー変数はインスタンスメンバーです。

もう 1 種類のメンバーは "クラスメンバー" です。クラスメンバーには、クラス全体に対して使用されるコピーが 1 つだけ存在します。クラス内で (ただし関数の外側で) 宣言したすべての変数は、そのクラスのプロパティになります。次の例では、Person クラスには ageusername という 2 つのプロパティがあり、それぞれのデータ型は Number と String です。

class Person {
    public var age:Number;
    public var username:String;
}

同様に、クラス内で宣言した関数は、そのクラスのメソッドになります。Person クラスの例では、getInfo() というメソッドを 1 つ作成します。

class Person {
    public var age:Number;
    public var username:String;
    public function getInfo():String {
        // getInfo() メソッドの定義
    }
}

前述の例では、Person クラスの getInfo() メソッド、および age プロパティと username プロパティは、すべてパブリックインスタンスメンバーです。age プロパティをクラスメンバーとするのは適切ではありません。年齢は人によって異なるからです。Person クラスに属するすべての人によって共有されるプロパティやメソッドだけが、クラスメンバーとなります。

たとえば、すべてのクラスで species 変数を持ち、そのクラスを表す種の適切な名前をラテン語で指定するとします。Person オブジェクトの種はすべて、"Homo sapiens" となるはずです。したがって、このクラスの各インスタンスごとに "Homo sapiens" というストリングの一意なコピーを保存することは無駄であり、このメンバーはクラスメンバーとするのが適切と考えられます。

クラスメンバーは、static キーワードで宣言します。たとえば、species クラスメンバーは、次のようなコードで宣言します。

class Person {
  public static var species:String = "Homo sapiens";
  // ...
}

次のコードのように、クラスのメソッドを静的なメソッドとして宣言することもできます。

public static function getSpecies():String {
    return Person.species;
}

静的メソッドは、静的プロパティだけにアクセスでき、インスタンスプロパティにはアクセスできません。たとえば、次のコードでは、クラスメソッド getAge() がインスタンス変数 age を参照しているので、コンパイルエラーになります。

class Person {
    public var age:Number = 15;
    // ...
    public static function getAge():Number {
        return age; /* **エラー**: 静的関数の中ではインスタンス変数にアクセスできない */
    }
}

この問題を解決するには、メソッドをインスタンスメソッドにするか、変数をクラス変数にします。

クラスメンバー (または静的プロパティ) の詳細については、静的メソッドと静的プロパティを参照してください。

XML データとカスタムクラスファイルを使用して動的にメニューを作成する方法を示すサンプルについては、Flash サンプルページ (www.adobe.com/go/learn_fl_samples_jp) を参照してください。このサンプルでは、ActionScript XmlMenu() コンストラクタを呼び出し、XML メニューファイルへのパスおよび現在のタイムラインへの参照をパラメータとして渡します。"Samples" zip ファイルをダウンロードし解凍して、"ActionScript2.0/XML_Menu" フォルダに移動して次のサンプルにアクセスします。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000780.html