2013-08-21 99 views
7

为什么这产生一个错误在Flash Builder?:覆盖Object.toString错误

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 

回答

9

toString()方法删除override

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

+0

你是对的,动态属性是迟到的。 '您添加到动态类实例的属性是运行时实体...'([Livedocs - Dynamic Classes](http://livedocs.adobe.com/flex/3/html/help.html?content = 03_Language_and_Syntax_10.html)) –

0

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"; 
    } 
    } 
} 
+0

奇怪......我试着明确地扩展对象,它仍然抱怨。 –

+0

@ Mr.Polywhirl我编辑了一下我的答案。即使在扩展Object的时候;你不需要使用覆盖。那是我的不好。 – JeffryHouser