オーバーライド
2009年4月16日 23:04
便利!
共通部分をスーパークラスに定義することで、
サブクラスは各々のユニークな機能のみ定義すればよい!スマート!
ボタンの元となるスーパークラスBtnを定義し、
サブクラスとしてBtn1、Btn2を定義した。
オーバーライドしているのは座標情報と表示されるテキストの設定部のみ。
//~ 中 略 ~ import flash.display.*; import flash.text.*; import flash.events.*; // ------------------------------------------------ // ボタンのスーパークラス // ------------------------------------------------ class Btn extends Sprite { //サブクラスで使用する変数やメソッドはprotectedで宣言してやる protected var _sx:Number = 50; //ボタンのx座標 protected var _sy:Number = 250; //ボタンのy座標 protected var _sw:Number = 100; //ボタンの縦サイズ protected var _sh:Number = 30; //ボタンの横サイズ protected var _label:String; //ラベル protected var _messageText:String; //表示テキスト public function Btn() { init(); makeBtn(); } //↓ サブクラスでこいつがオーバーライドされる internal function init():void { _label = "スーパークラス"; _messageText = "スーパークラスだよ"; } protected function makeBtn():void { //ボタン背景 var square:Shape = new Shape(); square.graphics.beginFill (0x000000, 1); square.graphics.drawRect(_sx, _sy, _sw, _sh); addChild(square); //テキストフォーマット設定 var tFmt:TextFormat = new TextFormat(); tFmt.color = 0xFFFFFF; tFmt.size = 12; tFmt.align = TextFormatAlign.CENTER; //テキスト設定 var tFld:TextField = new TextField(); tFld.defaultTextFormat = tFmt; tFld.text = _label; tFld.width = _sw; tFld.height = tFld.textHeight + 4; tFld.x = _sx; tFld.y = _sy + _sh/2 - tFld.textHeight/2 - 2; tFld.selectable = false; addChild(tFld); addEventListener(MouseEvent.MOUSE_DOWN, function():void{ y = 2; var msgTFld:TextField = new TextField(); msgTFld.text = _messageText; FlashTest(root).tFld = msgTFld; }); addEventListener(MouseEvent.MOUSE_UP, function():void{y = 0}); } } // ------------------------------------------------ // ボタンのサブクラス 1 // ------------------------------------------------ class Btn1 extends Btn { public function Btn1() { } //initメソッドをオーバーライド override internal function init():void { _label = "ボタン1"; _messageText = "サブクラス1だよ"; _sx = 180; } } // ------------------------------------------------ // ボタンのサブクラス 2 // ------------------------------------------------ class Btn2 extends Btn { public function Btn2() { } //initメソッドをオーバーライド override internal function init():void { _label = "ボタン2"; _messageText = "サブクラス2だよ"; _sx = 310; } }
ちなみにアクセス制御の属性は以下の通り。
- internal(デフォルト)
同じパッケージ内のクラスから、アクセス可能。
クラスやプロパティ・メソッドにとくにアクセス制御の属性を指定しなければ、
internalとして扱われる(但し、コンストラクタを除く)。 - private
定義されたクラス内からのみ、アクセス可能。 - protected
定義されたクラスとそのサブクラスからのみアクセス可能 - public
任意のクラスやタイムラインからアクセス可能。
コンストラクタに指定出来るのはこれのみ。
カテゴリー: programming
Leave a comment
コメントはまだありません
No comments yet.