カスタムクラスと継承について(3)
2007/11/27 21:31 - AS3.0
子孫クラスのインスタンスから直接参照をする祖先クラスのメンバは internal や protected で指定しちゃダメなのか? と、はたと気づいて、プロパティを public 指定してクラス構築をしたのが、前回の話でした(厳密には public 指定ではなく、privete +セッター&ゲッターのコンボです)。
で、今回は同様なことをメソッドについて試してみます。
メソッド呼び出しにゲッター・セッターを使う、なんてことは多分ないはずなので、素直に public 属性でコードを記述します。
結果、以下のようなクラスファイルになりました。
今回も ClassA にのみプロパティとメソッドの定義をおこなっています。 ClassB と ClassC は前回使ったクラスファイルを使い回します。
ClassA で定義したメソッドは DisplayObjectContainer のメソッドである addChild、removeChild、getChild をイメージしたメソッドにしてみました。
一つの Sprite のみを対象とする○○Child 的な感じといったところでしょうか。
前回同様、ClassB と ClassC のインスタンスを作って、そのインスタンスから、ClassA から継承しているメソッドにアクセスしてみます。
var sB:Sprite = new Sprite(); sB.name = "ClassB インスタンスの対象スプライト"; var sC:Sprite = new Sprite(); sC.name = "ClassC インスタンスの対象スプライト"; var cB:ClassB = new ClassB(); (cB.getSprt()==null)?trace("null"):trace(cB.getSprt().name); cB.addSprt( sB ); (cB.getSprt()==null)?trace("null"):trace(cB.getSprt().name); cB.removeSprt(); (cB.getSprt()==null)?trace("null"):trace(cB.getSprt().name); trace( "----------" ); var cC:ClassC = new ClassC(); (cC.getSprt()==null)?trace("null"):trace(cC.getSprt().name); cC.addSprt( sC ); (cC.getSprt()==null)?trace("null"):trace(cC.getSprt().name); cC.removeSprt(); (cC.getSprt()==null)?trace("null"):trace(cC.getSprt().name);
これまた前回同様、何の問題もなく期待通りの結果になりました。
null ClassB インスタンスの対象スプライト null ---------- null ClassC インスタンスの対象スプライト null
今回のテストから以下のことが分かります。
前回プロパティで確認した「親子クラスがある程度できあがった状態でプロパティ追加の仕様変更が生じても、当該クラスのコード書き換えだけでオッケー」ってことがメソッドでも全く同じように適用できるということですね。
じゃあ internal や protected の出番っていつなのよ?
勉強不足のせいでよくわかりません。もっといろいろ文献を読んで勉強したいと思います。