【问题标题】:Override Object.toString Error覆盖 Object.toString 错误
【发布时间】:2013-08-23 05:04:00
【问题描述】:

为什么这会在 Flash Builder 中产生错误?:

package {
  public class Foo {
    override public function toString():String {
      return "Foo";
    }
  }
}

制表符补全表明这可用于覆盖...

错误信息:

Multiple markers at this line:
-public
-1020: Method marked override must override another method.
-overridesObject.toString

【问题讨论】:

    标签: apache-flex flex4 flash-builder overriding tostring


    【解决方案1】:

    toString() 方法上删除override

    toString() 方法中存在一个流行的误解,即:如果要提供超类方法的自定义实现,则需要override 关键字。但是在Object 的情况下,toString() 是动态的并且在运行时附加,从而不需要覆盖。相反,实现将由开发人员提供,因此不会在运行时创建。只需编写自己的toString():String 实现即可。

    【讨论】:

    • 你说得对,动态属性是后期绑定的。 Properties that you add to an instance of a dynamic class are run-time entities... (Livedocs - Dynamic Classes)
    【解决方案2】:

    Foo 没有扩展一个类;所以因此没有方法可以覆盖。只需从函数定义中删除 override 关键字,它应该可以编译

    package {
      public class Foo {
        public function toString():String {
          return "Foo";
        }
      }
    }
    

    我要补充一点,toString()Object 类的一个方法,许多 ActionScript 类都从该类扩展而来。但是,即使扩展 Object,也不需要重写 toString() 方法。来自文档:

    要在 Object 的子类中重新定义此方法,请不要使用 覆盖关键字。

    像这样:

    package {
      public class Foo extends Object {
        public function toString():String {
          return "Foo";
        }
      }
    }
    

    【讨论】:

    • 奇怪...我尝试显式扩展 Object ,但它仍然抱怨。
    • @Mr.Polywhirl 我稍微编辑了我的答案。即使在扩展对象时;你不需要使用覆盖。那是我的错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多