2013-08-21 33 views
7

Dlaczego to spowodować błąd w programie Flash Builder ?:Zastąp Object.toString błąd

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

Tab zakończenie sugeruje, że jest dostępny dla ręcznego ...

Komunikat o błędzie:

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

Odpowiedz

9

Usuń override na metodzie toString().

Istnieje popularne nieporozumienie wśród metod toString(), a mianowicie: jeśli chcemy zapewnić niestandardową implementację metody super klasy, potrzebne jest słowo kluczowe override. Jednak w przypadku modelu dynamiczne jest ustawienie toString() i jest ono dołączane w czasie wykonywania, co neguje konieczność nadpisania. Zamiast tego, programista musi dostarczyć implementację, aby nie była tworzona w środowisku wykonawczym. Wystarczy napisać własną implementację toString():String.

+0

Masz rację, właściwości dynamiczne są spóźnione. 'Właściwości dodane do instancji klasy dynamicznej są obiektami wykonawczymi ...' ([Livedocs - Dynamic Classes] (http://livedocs.adobe.com/flex/3/html/help.html?content = 03_Language_and_Syntax_10.html)) –

0

Foo nie rozszerza klasy; dlatego nie ma żadnych metod, które można przesłonić. Wystarczy usunąć słowa kluczowego override z definicji funkcji i należy go skompilować

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

dodam że toString() to metoda klasy Object których wiele klas ActionScript rozciągają się od. Ale nawet jeśli rozszerzysz Object, nie musisz przesłonić metody toString(). Z dokumentacji:

Aby ponownie zdefiniować tę metodę w podklasie obiektu, nie należy używać słowa kluczowania zastępczego .

Jak to:

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

Dziwne ... Próbowałem wyraźnie rozszerzyć Object i nadal narzekałem. –

+0

@ Mr.Polywhirl Edytowałem trochę odpowiedź. Nawet przy rozszerzaniu Object; nie musisz używać przesłonięcia. To było moje zło. – JeffryHouser