Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 使用set重写公共变量_Actionscript 3 - Fatal编程技术网

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。