オーバーライド
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.