ActionScript 3 で抽象クラス
Java でいう abstract 修飾子がないので疑似実装するしかないですが、今までは getQualifiedClassName() 使ってクラス名を取得後、文字列で判別してました。でも前回のエントリーで constructor プロパティの有用性を知ったので、こちらを使っての実装法を考えてみました。
ActionScript
// AbstractClass
package
{
public class AbstractClass
{
public function AbstractClass():void
{
if (Object(this).constructor == AbstractClass)
{
throw new Error("このクラスは抽象クラスなので直接インスタンス化できません.");
}
}
}
}
// SubClass
package
{
public class SubClass extends AbstractClass
{
public function SubClass():void
{
}
}
}
こんな感じにしておけば、new AbstractClass() だとエラーになりますが、new SubClass() だとインスタンス化できます。className プロパティとかを実装したいのであれば、やっぱり getQualifiedClassName() を使わないといけませんが、そうでなければこの方法で十分な気がします。
この方法を考えてる時に constructor プロパティの取得法がいまいち分からなかったんですが、seyself さんから教えていただきました。ありがとうございます。