有没有办法子类化和覆盖自定义命名空间中的方法?

Jus*_*hms 3 flash actionscript flex3 actionscript-3 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{
        _v123 = val;
    }

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

   }
}
Run Code Online (Sandbox Code Playgroud)

现在我想在子类中扩展和覆盖它...

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);
      }

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

   }
 }
Run Code Online (Sandbox Code Playgroud)

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

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

    use namespace my_name_space override function my_name_space::setABC(val:String):void
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多其他语法组合,但大多数甚至都不会通过预编译检查.(很多都有某种类型的命名空间错误)我有一种感觉这是不可能的,但想知道是否有人可能有任何想法?

Jua*_*ano 6

詹姆斯的回答是正确的.您刚刚无法正确添加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;
}
Run Code Online (Sandbox Code Playgroud)

  • 还有所有这些说,我想(礼貌地)告诉贾斯汀,因为人们试图帮助你,以及标记人们的答案是如此痛苦.我们都在这里学习. (2认同)