2015-07-20 97 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; } 
} 

需要注意的是,因为你只在这里实现干将,这些属性做份额相似之处在常量它们是只读的。

相关问题