Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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
Apache flex 扩展对象时;为什么不使用;这";而不是",;超级";更改对象成员时_Apache Flex_Oop_Actionscript - Fatal编程技术网

Apache flex 扩展对象时;为什么不使用;这";而不是",;超级";更改对象成员时

Apache flex 扩展对象时;为什么不使用;这";而不是",;超级";更改对象成员时,apache-flex,oop,actionscript,Apache Flex,Oop,Actionscript,这个问题是从ActionScript上下文提出的,但也可以从Java上下文提出 我作为示例使用的代码来自。在下面的代码摘录中,NoteCard类具有从SkinnableComponent类继承的启用和禁用状态。我的问题是,;为什么在启用的setter中我们称为super.enabled=value;而不是这个。enabled=value;。我们已经从构造函数中创建了NoteCard对象实例,因此我们不能使用“this”关键字设置已启用成员的值。如果您确实为此交换了super,则编译器不会显示错误

这个问题是从ActionScript上下文提出的,但也可以从Java上下文提出

我作为示例使用的代码来自。在下面的代码摘录中,NoteCard类具有从SkinnableComponent类继承的启用和禁用状态。我的问题是,;为什么在启用的setter中我们称为super.enabled=value;而不是这个。enabled=value;。我们已经从构造函数中创建了NoteCard对象实例,因此我们不能使用“this”关键字设置已启用成员的值。如果您确实为此交换了super,则编译器不会显示错误,但代码无法工作

    package
    {

     import spark.components.supportClasses.SkinnableComponent;

      public class NoteCard extends SkinnableComponent
      {
       public function NoteCard()
       {
        super();
       }


      override public function set enabled(value:Boolean) : void
      {
       if (enabled != value)
       invalidateSkinState();

      super.enabled = value;
      }

      override protected function getCurrentSkinState() : String
      {
       if (!enabled)
       return "disabled";

      return "normal"
      }

     }
    }        
如果我们使用:

  override public function set enabled(value:Boolean) : void
  {
   if (enabled != value)
   invalidateSkinState();

  enabled = value;
  }
我们将进入无限循环。这一行:

enabled = value;

将一次又一次地调用同一个setter。

在这种特殊情况下,您将重写类的setter。您可以实现自己的附加代码来处理新设置的值,但是也应该调用来自超类的代码,因为您可能不知道基类setter将做什么(可以设置一个带有值的私有变量)。您必须调用
super.setterName=value
来确保这一点。如果您使用
this
调用,您将在无限循环中调用实现的setter。您可以省略
super
调用,如果您确定这不是必需的

不相关,但我在devsI的面试测试中使用了相同类型的示例,明白了吗?谢谢现在我的眼睛已经睁开了,这很简单,但实际上是一个基本点。