覆盖另一个类的函数

时间:2012-04-04 15:27:09

标签: actionscript-3 flex

我在我的一个班级中定义了这个函数:

public function onUse():void {};

然后在我的另一个类中(让我们称之为“class2”),我创建了这个类的对象,然后想要用另一个类重写这个函数。在一些Google-Fu之后,我找到了这个,然后用它......

button.onUse {
    variable = value;
}

...但它会立即执行,而不是在调用onUse()时 - 它似乎是一个空函数,总是。

我没有找到更多 - 我自己尝试了一些东西,比如在class2中指定一个函数并使用button.onUse = function();,但它总是会抛出错误。

任何人都可以告诉我,我想要做的事情是否真的可行,如果是,我该怎么做?

2 个答案:

答案 0 :(得分:3)

您只能在扩展课程时覆盖函数:

public class A {
    public function foo():void {
        doStuff();
    }
}

public class B extends A {
    override public function foo():void {
        doOtherStuff();
    }
}

var n:A = new A(); 
n.foo(); // => calls doStuff();

var o:B = new B();
o.foo(); // => calls doOtherStuff();

因此,在运行时无法为实例的类方法分配不同的函数。

但是,您可以让原始类包含类型为Function字段,然后只为其分配一个不同的闭包。

public class A {
    public var foo:Function;
}

var n:A = new A();
n.foo = function ():void { 
    doStuff();
};
n.foo(); // => calls doStuff();

var o:A = new A();
o.foo = function ():void {
    doOtherStuff();
}
o.foo(); // => calls doOtherStuff();

答案 1 :(得分:0)

检查

的语法
button.onUse {
    variable = value;
}

函数将被定义为

public function onUse():void {};

并用

覆盖
override public function onUse():void {
}

在另一个班级

您尝试这样做的方式并不构成覆盖功能。

我在类似情况下所做的是在类

中创建一个onClickFunction函数
public var onClickFunction:Function = null; 

然后在CLICK事件监听器函数中添加

if(onClickFunction != null){
    onClickFunction();
}

然后你可以通过做这样的事情来分配你的点击功能

button.onClickFunction = function():void {     变量=值;     // 做东西 }

这不是最好的方法,但可能是实现功能的最简单方法。理想情况下,你会像隔离物所暗示的那样使用遗传。