クイック&ダーティハック:
定数MAX
を のプロパティとして扱うには、次のように再定義して設定B
する必要があります。MAX
A.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 {}