2013-08-21 32 views
7

Tại sao điều này tạo ra một lỗi trong Flash Builder ?:Override Object.ToString Lỗi

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

Tab hoàn thành cho thấy rằng đây là có sẵn cho ghi đè ...

Thông báo lỗi:

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

Trả lời

9

Di override vào phương pháp toString().

Có một quan niệm sai lầm phổ biến trong khoảng về phương pháp toString(), cụ thể là: nếu một người muốn cung cấp triển khai tùy chỉnh phương pháp siêu lớp, thì cần có từ khóa override. Nhưng trong trường hợp Object, toString() là động và được đính kèm trong thời gian chạy, phủ nhận nhu cầu ghi đè. Thay vào đó, việc triển khai sẽ được cung cấp bởi nhà phát triển, do đó, một nhà phát triển không được tạo ra khi chạy. Người ta chỉ cần viết thực hiện toString():String của riêng mình.

+0

Bạn nói đúng, các thuộc tính động bị trễ. 'Các thuộc tính mà bạn thêm vào một thể hiện của một lớp động là các thực thể thời gian chạy ...' ([Livedocs - Lớp động] (http://livedocs.adobe.com/flex/3/html/help.html?content = 03_Language_and_Syntax_10.html)) –

0

Foo không mở rộng một lớp học; do đó không có phương pháp nào để ghi đè. Chỉ cần loại bỏ các từ khóa override từ định nghĩa chức năng và nó sẽ biên dịch

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

Tôi sẽ thêm rằng toString() là một phương pháp của lớp Object mà nhiều lớp ActionScript mở rộng từ. Nhưng, ngay cả khi bạn mở rộng Object, bạn không cần ghi đè phương thức toString(). Từ tài liệu:

Để xác định lại phương thức này trong phân lớp đối tượng, không sử dụng từ khóa ghi đè .

Như thế này:

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

Lạ ... Tôi đã cố gắng mở rộng Object một cách rõ ràng và nó vẫn phàn nàn. –

+0

@ Mr.Polywhirl Tôi đã chỉnh sửa câu trả lời của mình một chút. Ngay cả khi mở rộng Object; bạn không cần sử dụng ghi đè. Đó là điều xấu của tôi. – JeffryHouser