staticなものは継承されません!

ActionScript 3.0 でまたもハマったのでメモメモ。

どうやら static なプロパティやメソッドは、 サブクラスには継承されないみたい。 ドキュメントの 継承されない静的プロパティ を見ると、

静的プロパティはサブクラスに継承されません。 つまり、サブクラスのインスタンスから静的プロパティにアクセスすることはできません。 静的プロパティは、そのプロパティが定義されたクラスオブジェクトからのみアクセス可能です。

って書かれております。で、 例えばこんなクラスが定義されてたとして、

public class Base
{
    protected static _hoge:String = 'hoge';

    public static function get hoge():String
    {
        return _hoge;
    }
}

それを元にサブクラスを作るって時に、 これだと大丈夫なんだけれども、

public class Extender extend Base
{
    public function Extender():void
    {
        trace(hoge);    //  hogeとか出てくる。
    }
}

コッチだとエラー吐いてコンパイル出来ない。

import Extender;

public class Others
{
    public function Others():void
    {
        trace(Extender.hoge);   //  未定義なものになってる。
    }
}

ドキュメントの 静的プロパティとスコープチェーン によると、

静的プロパティは継承されませんが、 そのプロパティが定義されたクラスおよびそのクラスのサブクラスのスコープチェーン内にあります。 このため、静的プロパティは、 定義されたクラスおよびサブクラスのスコープ内にあると言います。 つまり、静的プロパティが定義されたクラスおよびそのサブクラスの本体内から直接静的プロパティにアクセスできます。

と言う事らしい。

この実装、ぶっちゃけ冗談としか思えないんですけど。 コンストラクタが public じゃないとダメ。ってのも驚いたけれども、 なんか言語仕様的に DRY じゃない気がするなぁ :-(

Posted at: 
2007/12/16 06:35:56
0 Comments
0 TrackBacks
Tags: 
ActionScript
Flash
Trackback: 
http://humming.via-kitchen.com/2007/12/16/unextended-static-property-on-actionscript3/trackback/

TrackBacks

まだ登録されていません。

Comments

まだ登録されていません。

Add Comment

Add Comment