« 静的(static)クラスの拡張 | メイン | MovieClipクラスの拡張 »

オーバーライド/ポリモーフィズム

ところで、YoMath.yoRound()関数を次のようにround()という名前にしてしまうとどうなるでしょうか。round()関数はスーパークラスであるMathクラスにもある関数です。このような場合はサブクラスで定義したroud()関数が優先されます。このようにスーパークラスと同じ名前のメンバーをサブクラスで再定義することを「オーバーライド(override)」するといい、このような手法は「ポリモーフィズム(polymorphism:多態性)」と呼ばれています。


sample→ex04-03/overrideフォルダ

クラス定義ファイル:YoMath.as
class YoMath extends Math {
//コンストラクタ
private function YoMath() {
}
//指定の桁数にまるめる --- Mathクラスのround()をオーバーライドする
static function round(v:Number, keta:Number) {
var tmpV = v * Math.pow(10, keta);
var ans = Math.round(tmpV) / Math.pow(10, keta);
return ans;
}
}

Mathクラスのround()関数をオーバーライドしたYoMathクラスのround()関数をテストすると次のようになります。

フレームアクション:yomath_3.fla
a = YoMath.round(23.85, 0)
trace(a) // 出力→ 24
b = YoMath.round(23.85, 1)
trace(b) // 出力→ 23.9

note:
オーバーライドと似た用語にオーバーロード(overload)があります。オーバーロードとは引数の型に応じて同名のメソッドをコンパイル時に振り分ける機能であり、ActionScriptはオーバーロードをサポートしていません。

投稿者 oshige : 2005年02月23日 10:37

トラックバック

このエントリーのトラックバックURL:
http://oshige.com/mt/mt-tb.cgi/1159

コメント

コメントしてください




保存しますか?