AS3笔记(8),关于方法重载

注:本文为frank的学习笔记,转载请注明原文链接
更多笔记请参看:http://www.2solo.cn/log/article.asp?id=87

首先需要申明的一点是:在As3.0中仍然不支持方法重载,我们只能通过简单的模拟来实现重载.我在网上看到有不少人把override称为重载,这是不对的.事实上override提供给子类来定义替换继承的方法的,从动作上理解只是覆盖。而方法重载的原本定义为通过传入不同的参数来实现调用不同的方法.这两个是决然不可混为一谈的.

要说重载概念在As3中的实现却是很简单的.主要利用函数的...(rest)来支持不定量参数来传递参数,不清楚的可以看我这篇笔记.看我下面写的一个示例:

/*@
Author:frank
Site:www.2solo.cn
Date:2008.01.31
Info:测试重载
*/

package {
    import flash.display.Sprite;

    public class OverLoadSample extends Sprite {
        private var paramA:Number=1;
        private var paramB:String="1";
        private var paramC:Object={a:1,b:2};
        private var paramD:Boolean=false;
        public function OverLoadSample() {
            //分别给入不同类型的参数
            testOverLoad(paramA,"A");
            testOverLoad(paramB,"B");
            testOverLoad(paramC,"C");
            testOverLoad(paramD,"D");
            testOverLoad();
        }
        private function testOverLoad(...args) {
            switch (typeof(args[0])) {
                case "object" :
                    testFuncObj(args);
                    break;
                case "number" :
                    testFuncNum(args);
                    break;
                case "string" :
                    testFuncStr(args);
                    break;
                case "boolean" :
                    testFuncBool(args);
                    break;
                default :
                    testFuncDefault(args);
                    break;
            }

        }
        private function testFuncDefault(args):void {
            trace("this is a unknown type");
        }
        private function testFuncNum(args):void {
            trace("this is a number"+", param="+args[1]);
        }
        private function testFuncObj(args):void {
            trace("this is a object"+", param="+args[1]);
        }
        private function testFuncStr(args):void {
            trace("this is a string"+", param="+args[1]);
        }
        private function testFuncBool(args):void {
            trace("this is a boolean"+", param="+args[1]);
        }
    }
}

上例的输出结果为:

this is a number, param=A
this is a string, param=B
this is a object, param=C
this is a boolean, param=D
this is a unknown type

我这里利用第一个参数的不同类型来调用不同的方法,同时将整个args传入调用的方法来实现完整参数的传递.除开类型,还可以通过判断给定值,参数数量等不同的方法来实现重载.



[本日志由 frank 于 2008-02-18 11:58 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 重载 AS3笔记 as3.0
评论: 2 | 引用: 0 | 查看次数: 3299
回复回复frank[2008-02-01 11:35 AM | del]
是这样的
回复回复Yuki[2008-02-01 11:06 AM | del]
哈哈,这是override和overload的区别.

这个"重载"的关键字在as3.0的帮助中真是藏的很隐蔽啊!
以下摘自as3.0的帮助:" ActionScript 3.0 不支持方法或构造函数重载。"
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭