Flash/As3 - 有没有办法做虚拟/可重写的常量?
问题描述:
在actionscript 3中,您不能创建重写变量,但为什么?你可以重写getter/setter,所以有什么不同?我遇到的问题是我想在基类中定义常量,然后让子类决定每个值应该是什么值。Flash/As3 - 有没有办法做虚拟/可重写的常量?
在我的情况下,假设我有一个类'Character'和一个从它延伸的子类'BillyBob'。
如果我希望Character类能够说:“我的所有子类都必须有常量'ON_SCREEN_X'和'EXPLOSION_MULTIPLIER',但是他们可以给他们任何他们想要的值。”这会很好,如果他们是比利鲍的常量。但是,似乎在基类中定义的const不能在类级别设置,因为它们是const,不能在任何方法中设置。 :(
答
在ActionScript 3你不能覆盖的变量,但为什么
当然,你可以 - 改变其在子类中值
可以覆盖吸气?/setter它有什么区别?
不同之处在于getters和setters是包含实现的函数,您可能想要在一个子类中进行更改,而只能更改一个平面值。
我的所有小类都必须有常数
ON_SCREEN_X
和EXPLOSION_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; }
}
需要注意的是,因为你只在这里实现干将,这些属性做份额相似之处在常量它们是只读的。
按照定义,常量在整个程序运行过程中保持不变(不动态)。它们非常高效,因为机器只需记住一次,然后再次检查或重新计算它们的值。可以**公共静态**变量不适合你吗?但我喜欢马蒂的建议如下... –