覆盖 Object.toString 错误

Posted

技术标签:

【中文标题】覆盖 Object.toString 错误【英文标题】:Override Object.toString Error 【发布时间】: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

【问题讨论】:

【参考方案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 我稍微编辑了我的答案。即使在扩展对象时;你不需要使用覆盖。那是我的错。

以上是关于覆盖 Object.toString 错误的主要内容,如果未能解决你的问题,请参考以下文章

object1.toString() == object2.toString() [重复]

重写Object.toString()总结

Java中Object.toString()返回的字符串的含义

Object.toString 或 Object.hashCode 是不是曾经给出对象的内存地址

Object.toString()方法返回16进制地址

NullPointerException:无法调用“Object.toString()”,因为“javax.swing.JButton.getIcon()”的返回值为 null