假设我的类有一个在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);
}
.... ????? ...
}
}
很容易覆盖受保护的,公共等方法,但有没有办法覆盖名称空间中定义的setABC方法* my_name_space *?
我尝试了以下语法,它似乎通过了FlashBuilder预编译器检查但不起作用。
use namespace my_name_space override function my_name_space::setABC(val:String):void
我已经尝试了许多其他语法组合,但大多数甚至都没有通过预编译检查。 (很多都有某种类型的命名空间错误)我有一种感觉这是不可能的,但想知道是否有人可能有任何想法?
答案 0 :(得分: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;
}
答案 1 :(得分:3)
这应该有效
override my_name_space function setABC(val:String):void
{
}