package

AS2 でも package の機能はありましたが、その役割は基本的にクラス名の重複を防ぐことでした。AS3 の package はアクセススコープの単位にもなります。

package とアクセス修飾子

AS3 では以下のようにして定義するクラスが含まれるパッケージ名を宣言します。以下の例では、sample パッケージ内に SampleClass クラスを定義しています。このときクラスの完全限定名は sample.SampleClass になります。

package sample {
  import othersample.OtherClass;
  class SampleClass {
    function sampleFunction() {}
  }
}

他のパッケージに定義されたクラスを使用するには、import を使用します。上の例のように明示的にクラス名を指定する代わりに * を使うこともできますが、一つ一つ指定した方が性能的には良い結果になるようです。

さて、AS3 では以下の4つのアクセス修飾子が使えます。AS2 では private が AS3 の protected に相当するものでした。注意しましょう。(ちなみに protected は ECMAScript 標準ではサポートされていません。本来、アクセススコープの管理は namespace を使うという考え方のようです。)

public     // どのクラスからでもアクセス可
internal   // 同一パッケージ内のクラスからのみアクセス可
protected  // 自身とサブクラスからのみアクセス可
private    // 外部からのアクセスなし

最初に示したサンプルコードの様に特にアクセス修飾子が指定されていない場合、AS3 では internal が適用されます。その他の修飾子を指定したい場合には、クラス名や関数名の前に public 等をつけます。

as ファイル

AS3 のクラスを定義したファイル名はクラス名に .as の拡張子をつけたものにします。また、パッケージを指定した場合は、パッケージ名と同じディレクトリ階層下にファイルを置きます。この記事の最初のサンプルは sample\SampleClass.as の内容というわけです。これは Java とおんなじですね。

一つのファイル内に複数のクラスを定義することもできます。ただし、public なリソースの定義はファイル内に一つだけ可能で、他のクラス定義は同一ファイル内のみでの参照になります。Java と少し違うのは、public 以外の定義に private をつけることです。また、Java のメンバクラスに相当する機能はありません。

package sample {
  import flash.events.*;
  public class SampleClass {
    public function SampleClass() {
      // コンストラクターを定義
      var innerClass:InnerClass = new InnerClass();
    }
  }
  private class InnerClass {
    // プライベートクラスの定義
  }
}

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261