是否可以拥有一个带有公共getter和受保护的setter的属性?
我有以下代码:
public class Mob extends Sprite {
// snip
private var _health:Number; // tried making this protected, didn't work
public function get health():Number { return _health; }
protected function set health(value:Number):void {
_health = value;
}
// snip
public function takeDamage(amount:Number, type:DamageType, ... additionalAmountAndTypePairs):void {
var dmg:Number = 0;
// snip
var h:Number = this.health; // 1178: Attempted access of inaccessible property health through a reference with static type components.mobs:Mob.
this.health = h - dmg; // 1059: Property is read-only.
}
}
我确实有this.health -= dmg;
但我将其拆分以获取有关编译器错误的更多详细信息。
我不明白该属性如何在同一个类中被认为是只读的。我也不明白它是如何无法进入的。
如果我将支持字段,getter和setter全部保护,它会编译,但这不是我想要的结果;我需要外部可读的健康。
答案 0 :(得分:5)
不,访问者必须具有相同的权限级别。你可以让你的公众 获取set函数,然后有一个受保护的setHealth,getHealth函数对。如果您愿意,可以将其反转,但关键是您有一组方法可以在公共权限下访问,另一组方法可以在受保护的权限级别访问。
答案 1 :(得分:3)
由于您将仅在_health
课程内更新Mob
,因此您可以编写一个私人函数进行设置。
private function setHealth(value:Number):void
{
_health = value;
}
并保持公众的吸气力。
答案 2 :(得分:0)
我不是专家,但我认为您可能想要使用
internal var _health:Number;
public function get health():Number { return _health; }
internal function set health(value:Number):void { _health = value; }