我有一个像这样的基类
class Base {
public var space:Number;
}
由
扩展class Desc extends Base {
override public function set space( space:Number ):void {
//code
}
}
这不编译。说,你没有对基类的控制,有什么方法可以实现同样的东西?
显而易见的是创建一个函数setSpace(),但是这个对象嵌入在使用public space
的现有系统中。
提前致谢。
答案 0 :(得分:3)
您的基类应该以这样的方式定义:
class Base {
// Don't use public variables. Make them private and define setters and getters
private var space_:Number;
public function get space():Number {
return space_;
}
public function set space(v:Number):void {
if (space_ === v) return;
space_ = v;
}
}
然后可以用这种方式覆盖:
class Desc extends Base {
override public function set space( space:Number ):void {
//code
}
}
修改强>
我错过了你说你无法控制基类的部分。在这种情况下,希望将space
定义为getter / setter(如果该类正确实现,则应该如此)。如果没有,您确实必须使用getSpace
和setSpace
等功能。
答案 1 :(得分:3)
来自Adobe:
使用
var
关键字声明的类成员变量不能 在子类中重写。
在您的情况下,使用setter不是一个选项。如果需要保留接口,请使用组合而不是继承:
class Desc {
private var _base:Base;
public function set space(space:Number):void {
//code
this._base.space = space;
}
}