2009-05-20 20 views
1

2つのクラスがあり、最初のクラスが2番目のクラスを拡張する場合、2番目のクラスは最初のクラスから静的関数をどのように呼び出すことができますか?AS3クラス関数のスコープ


package p1 { 
    class a { 
     static function a1() { 
      //do soemthing 
     } 
    } 

    class b extends a { 
     static function b1() { 
      //do something else 
     } 
    } 
} 

a.a1(); // this works 
b.a1(); // this doesn't work 
b.b1(); //this works 
+0

whooopsメソッドは静的です。 – respectTheCode

+0

ah ...私は&bがクラスAとBのインスタンスであると思っていました。静的関数を継承できるかどうかは分かりません... – quoo

答えて

2

"B extends A" - 実際には "クラスBはAのすべてのメソッドとプロパティを持っています"と同じではありません。クラスではありませんが、クラスBのオブジェクトはクラスAで定義されたすべてのプロパティとメソッドを実装します。静的メソッドまたはプロパティを呼び出すと、クラスは処理しますがオブジェクトは処理しません(名前空間の使用法とよく似ています)。

ADDED: あなたの仕事を解決する唯一の方法は、クラスBのa1(args)をオーバーライドし、内部でsuper.a1(args)を呼び出すことです。しかし、このような種類の使用を避けることができない場合は、ソフトウェアアーキテクトの問題があるように思えます。

+0

この回答は正しいです。時間を拡大するために、クラスbの*インスタンス*のメソッドを呼び出すと、そのメソッドが存在しない場合、Flashはクラスaをチェックします。しかし、静的メソッドを呼び出すときは、継承階層を持つものではない修飾されたクラス名への(グローバル)参照を介して静的メソッドを呼び出します。 – fenomas

+0

意味があります。私が聞きたかったものではなく、私はそれに対処することができます。 – respectTheCode

-1

親メソッドを呼び出して、スーパーの使用。

super.b1(); 

EDIT:あなたが書いたことを見て、私はあなたが公開または保護されるようにa1の範囲を設定する必要があると思います。

+0

b1はサブクラスbにあり、aを継承している場合はaそれらを正常に呼び出すことができます。 – quoo