2014-03-28 46 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

真棒。非常感谢你! –