簡體   English   中英

從另一個 class 覆蓋 function

[英]Overriding function from another class

我在我的一個課程中定義了這個 function:

public function onUse():void {};

然后在我的另一個班級(我們稱之為“class2”)中,我創建了這個 class 的 object,然后想用另一個覆蓋這個 function。 經過一些 Google-Fu 之后,我找到了這個,並使用了它......

button.onUse {
    variable = value;
}

...但它會立即執行,而不是在調用 onUse() 時執行 - 這似乎總是一個空的 function。

我沒有找到更多 - 我自己嘗試了一些東西,比如在 class2 中指定一個 function 並使用button.onUse = function(); ,但它總是會拋出錯誤。

誰能告訴我我想做的事情是否真的可行,如果可行,我該怎么做?

您只能在擴展 class 時覆蓋函數:

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 分配給實例的 class 方法。

但是,您可以讓您的原始 class 包含一個類型為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();

檢查語法

button.onUse {
    variable = value;
}

function 將被定義為

公共 function onUse():void {};

並被覆蓋

override public function onUse():void {
}

在不同的 class

您嘗試執行此操作的方式並不構成覆蓋 function。

我在類似情況下所做的是在 class 中創建一個 onClickFunction function

public var onClickFunction:Function = null; 

然后在 CLICK 事件監聽器 function 添加

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

然后你可以通過做這樣的事情來分配你的點擊功能

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

這不是最好的方法,但可能是實現功能的最簡單方法。 理想情況下,您會按照太空海盜建議的方式使用 inheritance。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM