Flash 有没有办法对自定义命名空间中的方法进行子类化和重写?
假设我有一个类,它的方法定义在一个命名空间中,而不是public、protected或internalFlash 有没有办法对自定义命名空间中的方法进行子类化和重写?,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
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道歉,并删除了我的评论,我通常不是最热情和模糊的人。