2014-03-28 47 views
1

我是新來的動作,所以請耐心等待。關於supers和小類的問題

我剛開始使用supers和子類。

我的問題基本上是這樣的:爲什麼當我使用 scoreDisplay.text = currentValue.toString();

它與線reset();

爲什麼不能將其與運行運行線說當前值= 0呢?

這裏是超級

import flash.display.MovieClip; 
public class Counter extends MovieClip 
{ 
    public var currentValue:Number; 

    public function Counter() 
    { 
     reset(); 
    } 

    public function addToValue(amountToAdd:Number):void 
    { 
     currentValue = currentValue + amountToAdd; 
     updateDisplay(); 
    } 

    public function reset():void 
    { 
     currentValue = 0; 
     updateDisplay(); 
    } 

    public function updateDisplay():void 
    { 

    } 
} 
} 

和子類

import flash.text.TextField; 
public class Score extends Counter 
{ 
    public function Score() 
    { 
     super(); 
    } 

    override public function updateDisplay():void 
    { 
     super.updateDisplay() 
     scoreDisplay.text = currentValue.toString(); 
    } 
} 

}

+0

你是什麼意思_use line_或_run與line_?澄清你的問題。 – Vince

+0

我的意思是爲什麼我必須把重置();在Counter類的構造函數中。爲什麼我不能將currentValue = 0放入構造函數中。 (否則遊戲中的分數不會爲0)。希望是有道理的。 –

回答

1

要回答你的問題,如果你只把currentValue = 0;在你的櫃檯類的構造函數,那麼你就不要不更新顯示列表。但是,您的reset函數確實會調用updateDisplay函數。因此,如果您從覆蓋updateDisplay函數的子類調用​​,那麼超級類將調用reset,這將調用子類的updateDisplay
另外,在你目前的例子中,調用超級的updateDisplay函數沒有意義,因爲它不包含任何內容。
它現在的方式實際上是一個比僅僅重置構造函數中的值更好的解決方案,因爲您可以隨時調用該函數,而無需再次調用可能包含其他元素的構造函數。我絕不會使用構造函數作爲「重置器」。

+0

你是什麼意思,你不更新顯示列表?也感謝您花時間回答我的問題。我很感激。 –

+0

如果更改「currentValue」的值,則文本字段的文本將保持不變,因爲每次更改currentValue的值時,都將文本字段的文本設置爲新值。它不會自動更新,你必須手動完成。 – Zhafur

+0

真棒。非常感謝你! –