Flash / As3 - 有没有办法做虚拟/可覆盖的常量?

时间:2015-07-20 00:24:32

标签: flash actionscript actionscript-3

在动作3中你不能改写覆盖变量,但为什么呢?你可以覆盖它的getter / setter,那有什么区别?我遇到的问题是我想在基类中定义常量,然后让子类决定每个应该是什么值。

在我的情况下,假设我有一个班级,'字符'和一个子类' BillyBob'从它延伸出来。

如果我希望Character类能够说,"我的所有子类都必须有常量' ON_SCREEN_X'和' EXPLOSION_MULTIPLIER',但他们可以给他们任何他们想要的价值。"如果它们是BillyBob中的常量,这将是很好的。但是,似乎在基类中定义的const不能在类级别设置,因为它们是const不能在任何方法中设置。 :(

1 个答案:

答案 0 :(得分:3)

  

在动作3中,您无法创建覆盖变量,但为什么?

当然可以 - 在子类中更改其值?

  

你可以覆盖它的getter / setter,那有什么区别?

不同之处在于getter和setter是包含您可能想要在子类中更改的实现的函数,而flat值可以简单地更改。

  

我的所有子类都必须有常量ON_SCREEN_XEXPLOSION_MULTIPLIER,但是他们可以为他们提供他们想要的任何值。

这样做的方法是使用getter。我不确定你为什么要用常数代替这个,但我个人会做的事情是:

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

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

请注意,由于您此处仅实现了getter,因此这些属性与常量具有相似之处,因为它们是只读的。