Actionscript 3 使用set重写公共变量
我有一个这样的基类Actionscript 3 使用set重写公共变量,actionscript-3,Actionscript 3,我有一个这样的基类 class Base { public var space:Number; } 扩展为 class Desc extends Base { override public function set space( space:Number ):void { //code } } 这不能编译。比如说,你不能控制基类,有什么方法实现同样的东西 最明显的是创建一个函数setSpace(),但是这个对象被嵌入到一个已经存在的使用公共空间
class Base {
public var space:Number;
}
扩展为
class Desc extends Base {
override public function set space( space:Number ):void {
//code
}
}
这不能编译。比如说,你不能控制基类,有什么方法实现同样的东西
最明显的是创建一个函数setSpace(),但是这个对象被嵌入到一个已经存在的使用公共空间的系统中
提前感谢。您的基类应该这样定义:
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
}
}
然后可以通过这种方式覆盖它:
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
您的基类应该这样定义:
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
}
}
然后可以通过这种方式覆盖它:
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
:
不能使用var
关键字声明类成员变量
在子类中被重写
在您的情况下,使用setter不是一个选项。如果需要保留接口,请使用组合而不是继承:
class Desc {
private var _base:Base;
public function set space(space:Number):void {
//code
this._base.space = space;
}
}
发件人:
不能使用var
关键字声明类成员变量
在子类中被重写
在您的情况下,使用setter不是一个选项。如果需要保留接口,请使用组合而不是继承:
class Desc {
private var _base:Base;
public function set space(space:Number):void {
//code
this._base.space = space;
}
}
在公共
之前,您需要覆盖
吗?是的,您需要,我忘记把它放进去了。但是它不编译,“不兼容的覆盖”同样,您可能需要将space
称为super.space
。因此,在集合
中,您需要设置自己的空间变量(在该类中声明),然后调用super.space。您应该为变量“space”选择另一个访问修饰符,如protected、internal或private。在public
之前是否需要在其中设置一个覆盖
?是的,您需要,我忘了把它放进去。但是它不编译,“不兼容的覆盖”同样,您可能需要将space
称为super.space
。因此,在set
中,您需要设置自己的空间变量(在该类中声明),然后调用super.space。您应该为变量“space”选择另一个访问修饰符,如protected、internal或private。