2015-07-20 41 views
0

在actionscript 3中,您不能創建重寫變量,但爲什麼?你可以重寫getter/setter,所以有什麼不同?我遇到的問題是我想在基類中定義常量,然後讓子類決定每個值應該是什麼值。Flash/As3 - 有沒有辦法做虛擬/可重寫的常量?

在我的情況下,假設我有一個類'Character'和一個從它延伸的子類'BillyBob'。

如果我希望Character類能夠說:「我的所有子類都必須有常量'ON_SCREEN_X'和'EXPLOSION_MULTIPLIER',但是他們可以給他們任何他們想要的值。」這會很好,如果他們是比利鮑的常量。但是,似乎在基類中定義的const不能在類級別設置,因爲它們是const,不能在任何方法中設置。 :(

+0

按照定義,常量在整個程序運行過程中保持不變(不動態)。它們非常高效,因爲機器只需記住一次,然後再次檢查或重新計算它們的值。可以**公共靜態**變量不適合你嗎?但我喜歡馬蒂的建議如下... –

回答

3

在ActionScript 3你不能覆蓋的變量,但爲什麼

當然,你可以 - 改變其在子類中值

可以覆蓋吸氣?/setter它有什麼區別?

不同之處在於getters和setters是包含實現的函數,您可能想要在一個子類中進行更改,而只能更改一個平面值。

我的所有小類都必須有常數ON_SCREEN_XEXPLOSION_MULTIPLIER,但他們可以給他們任何他們想要的值。

這樣做的方法是使用getters。我不知道你爲什麼要代替這個常數,但我個人會做線沿線的東西:

public class Character { 
    public function get explosionMultiplier():Number { return 1; } 
} 

public class BillyBob extends Character { 
    public override function get explosionMultiplier():Number { return 1.2; } 
} 

需要注意的是,因爲你只在這裏實現干將,這些屬性做份額相似之處在常量它們是隻讀的。

相關問題