Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 有没有办法对自定义命名空间中的方法进行子类化和重写?_Flash_Actionscript 3_Actionscript_Flex3_Flex4 - Fatal编程技术网

Flash 有没有办法对自定义命名空间中的方法进行子类化和重写?

Flash 有没有办法对自定义命名空间中的方法进行子类化和重写?,flash,actionscript-3,actionscript,flex3,flex4,Flash,Actionscript 3,Actionscript,Flex3,Flex4,假设我有一个类,它的方法定义在一个命名空间中,而不是public、protected或internal package com.foo.bar { import com.foo.my_name_space public class bar { private var _vabc:String private var _v123:String protected function set123(val:String):void{ _v12

假设我有一个类,它的方法定义在一个命名空间中,而不是public、protected或internal

package com.foo.bar
{
   import com.foo.my_name_space
   public class bar
   {
    private var _vabc:String
    private var _v123:String

    protected function set123(val:String):void{
        _v123 = val;
    }

    my_name_space function setABC(val:String):void{
        _vabc = val;
    }

   }
}
现在我想在一个子类中扩展并覆盖它

package com.foo
{
   import com.foo.bar.bar
   import com.foo.my_name_space

   public class foo extends bar
   {
      override protected function set123(val:String):void{
        super.set123(val);
      }

       .... ????? ...

   }
 }
很容易覆盖受保护的、公共的等方法,但是有没有办法覆盖在名称空间*my_name_space*中定义的setABC方法

我尝试了以下语法,它似乎通过了FlashBuilder预编译器检查,但不起作用

    use namespace my_name_space override function my_name_space::setABC(val:String):void
我尝试了许多其他语法组合,但大多数都无法通过预编译检查。(很多人都有某种类型的名称空间错误)我觉得这是不可能的,但想知道是否有人有什么想法?

这应该行得通

override my_name_space function setABC(val:String):void
{   
}

詹姆斯的回答是对的。您只是未能适当地添加
use namespace
指令。此示例按预期工作:

package {
    import flash.display.Sprite;
    import flash.events.Event;
    import test.Base;
    import test.Child;
    import test.my_namespace;

    public class Main extends Sprite {

        use namespace my_namespace;

        public function Main():void {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            var base:Base = new Base();
            base.test();

            var child:Child = new Child();
            child.test();
        }

    }

}

package test {
    import test.my_namespace;
    use namespace my_namespace;

    public class Base {

        my_namespace function test():void {
            trace("Base");
        }

    }

}

package test {
    import test.Base;
    import test.my_namespace;
    use namespace my_namespace;

    public class Child extends Base {

        public function Child() {

        }

        override my_namespace function test():void {
            trace("Child");
            super.my_namespace::test();
        }
    }

}

package test {
    public namespace my_namespece;
}

如何声明名称空间?我们能看一下密码吗?谢谢,他可能是对的。根据我所做的研究,这是从自定义名称空间重写方法的正确方法。确保在类中此重写之前的某个位置调用“using namepspace my_namespace”。如果这不适用于您,那么您可能已将命名空间定义为私有命名空间。抱歉,无法将其标记为答案,因为它不完整。此语法将起作用。。。如果您还使用了“use namespace”指令,则表示同意。我也这么想,把它作为评论贴了出来。谢谢你提供了完整的实现。尽管如此,我还是想(礼貌地)提醒贾斯汀不要对试图帮助你的人如此不满,也不要记下别人的答案。我们都在这里学习。我向@james lyon道歉,并删除了我的评论,我通常不是最热情和模糊的人。