継承とアクセス修飾子
as3の継承とアクセス修飾子の関係があいまいだったので、ちょいと調べたのでメモ。
as3のアクセス修飾子には、
・private
・protected
・internal
・public
の4つがある。
■private修飾子
privateは、そのクラスのみでアクセス可能。
継承した子孫クラスからもアクセスできない。
■protected
同じクラスとその派生クラス(継承したクラス)までアクセス可能。
継承したクラスにアクセスした場合のもっとも厳しい修飾子はこれになる。
■internal
同一パッケージ内からアクセス可能。
■public
どこからでもアクセス可能。
継承した場合に、コンストラクタ内でsuper()を行わずに継承したクラスを明示的に初期化しないと、
子孫クラスのコンストラクが終了したタイミングで、引数無しとしてsuper()が暗黙的に呼び出される。
よって、継承するクラスのコンストラクタに引数が必要で、デフォルト値も設定されていない場合には、必ず継承したクラスのコンストラクタでsuper()を実行して継承したクラスを初期化する必要がある。
ちなみに、super()の場所はコンストラクタ内であればどこでもかまわない。(as2ではコンストラクタの先頭で実行する必要があった。)
■override
overrideは、親クラスのメソッドを上書きたい時に用いる。
この時親クラスのメソッドのアクセス修飾子は、protected以上の必要がある。
override アクセス修飾子 function methodName():*{
}
上書きたいメソッドは、
・アクセス修飾子
・関数名
・引数の数と型
・戻り値の型
上記4つが一致している必要がある。
親クラスのメソッドを実行したい時は、super.methodName()で呼び出せる。
プロパティには、overrideは使えない。
継承されていれば、親クラスのstatic宣言されたメソッド、プロパティにもprotected以上ならアクセスできる。
とりあえずこんなかんじ。