2

親クラスで定義された静的定数を Flex の子クラスの属性として扱うことができないのはなぜですか?

フレックス

class A {
  public static const MAX:int = 100;
}

class B extends A {}

A.Max; // Valid
B.Max; // Invalid

ジャワ

class A {
  public static final int MAX = 100;
}

class B extends A {}

A.Max; // Valid
B.Max; // Valid
4

1 に答える 1

5

クイック&ダーティハック:

定数MAXを のプロパティとして扱うには、次のように再定義して設定Bする必要があります。MAXA.MAX

class B extends A {
  public static const MAX:int = A.MAX;
}

継承されない静的プロパティ

静的プロパティはサブクラスに継承されません。これは、サブクラスのインスタンスを介して静的プロパティにアクセスできないことを意味します。静的プロパティは、それが定義されているクラス オブジェクトを介してのみアクセスできます。たとえば、次のコードは、Base という名前の基本クラスと、Extender という名前の Base を拡張するサブクラスを定義します。という名前の静的変数testが Base クラスで定義されています。次の抜粋で記述されているコードは、厳密モードではコンパイルされず、標準モードでは実行時エラーが生成されます。

package {
    import flash.display.MovieClip;
    public class StaticExample extends MovieClip
    {
        public function StaticExample()
        {
            var myExt:Extender = new Extender();
            trace(myExt.test);// error
        }
    }
}

class Base {
    public static var test:String = "static";
}

class Extender extends Base { }

test次のコードに示すように、静的変数にアクセスする唯一の方法は、クラス オブジェクトを使用することです。

Base.test;

ただし、静的プロパティと同じ名前を使用してインスタンス プロパティを定義することはできます。このようなインスタンス プロパティは、静的プロパティと同じクラスまたはサブクラスで定義できます。たとえば、前の例の Base クラスは、 という名前のインスタンス プロパティを持つことができますtest。次のコードは、インスタンス プロパティが Extender クラスによって継承されるため、コンパイルおよび実行されます。テスト インスタンス変数の定義がコピーされずに Extender クラスに移動された場合も、コードはコンパイルおよび実行されます。

package
{
    import flash.display.MovieClip;
    public class StaticExample extends MovieClip
    {
        public function StaticExample()
        {
            var myExt:Extender = new Extender();
            trace(myExt.test);// output: instance
        }
    }
}

class Base
{
    public static var test:String = "static";
    public var test:String = "instance";
}

class Extender extends Base {}
于 2013-03-14T23:16:25.130 に答える