子をn個持つ親クラスのコンストラクタには引数は指定しない
ようやっと初めての AS3 の業務に取り掛かっています。今までなんだかんだの制約があり AS3 でまともな業務を行なったことはありませんでした。早速 AS3 で気付いた点を以下に記述します。恐らくとっても何をいまさらなエントリーです。
親クラスのコンストラクタに引数が指定してある場合、子クラスでは明示的に super メソッドを呼び出す必要がでてくるようです。
例えば以下のような Person クラスを親に持つ Boy クラスと Girl クラスを Sample クラスから利用するには以下のようになります。
※package記述は略 public class Person{ private var name:String; public function Person(name:String){ this.name = name; } } public class Boy extends Person{ public function Boy(name:String){ super(name); } } public class Girl extends Person{ public function Girl(name:String){ super(name); } } public class Sample{ public function Sample(){ var boy:Boy = new Boy("boy"); var girl:Girl = new Girl("girl"); } }
ここで Person クラスを親に持つクラスが Boyクラス、Girl クラス以外に複数増える場合、それら複数のクラス全てに明示的なコンストラクタの実装と super メソッドの呼び出しを行なう記述が必要になってしまいます。また、Person コンストラクタに引数を追加したいという場合、子クラス全てのコンストラクタと super メソッド呼び出しの箇所に修正を入れる必要がでてきてしまいます。
これを避けるためには、Personクラスのコンストラクタに引数を指定するのはやめ、別メソッドで同処理を行なうようにします。
public class Person{ private var name:String; public function create(name:String):void{ this.name = name; } } public class Boy extends Person{ } public class Girl extends Person{ } public class Sample{ public function Sample(){ var boy:Boy = new Boy(); var girl:Girl = new Girl(); boy.create("boy"); girl.create("girl"); } }