覆盖 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() [重复]
Java中Object.toString()返回的字符串的含义
Object.toString 或 Object.hashCode 是不是曾经给出对象的内存地址
NullPointerException:无法调用“Object.toString()”,因为“javax.swing.JButton.getIcon()”的返回值为 null