关于超级和子类的问题

时间:2014-03-28 19:13:59

标签: actionscript-3 inheritance

我是动作脚本的新手所以请耐心等待。

我刚开始使用超级和子类。

我的问题基本上是这样的:为什么当我使用这条线时 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();
    }
}

}

1 个答案:

答案 0 :(得分:1)

要回答您的问题,如果您只将currentValue = 0;放入计数器类'构造函数,然后您不更新显示列表。但是,reset函数会调用updateDisplay函数。因此,如果从覆盖super();函数的子类调用updateDisplay,那么超类将调用reset来调用子类的updateDisplay
此外,在您当前的示例中,没有调用超级updateDisplay函数的含义,因为它不包含任何内容。
它现在的方式实际上是一个比重置构造函数中的值更好的解决方案,因为您可以随时调用reset函数而无需再次调用构造函数,该构造函数也可能包含其他元素。我永远不会将构造函数用作"重置器"。