2012-01-25 39 views
5

Tôi đến để cần thêm một chút thông tin từ các điểm của tôi, vì vậy tôi nghĩ rằng tôi muốn thêm một X trước đó, trước đó để tôi có thể có được deltaX và deltaY. Bây giờ, điều này làm việc tốt nếu tôi thực hiện một lớp học khép kín đơn giản.Làm cách nào để mở rộng lớp AS3 đúng cách?

Tôi nghĩ, tuy nhiên, tôi muốn mở rộng lớp flash.geom.Point để hưởng lợi từ các chức năng và tính toán khác mà nó cung cấp.

Vì vậy, tôi đã mở rộng Điểm và sửa đổi các trình cài đặt x và y khi cần. Khi tôi biên dịch, tôi nhận được một lỗi rằng những người định cư không được đánh dấu để ghi đè khi họ nên được. Vì vậy, tôi ghi đè lên, nhưng sau đó tôi nhận được một lỗi nói rằng những điều này không ghi đè lên bất kỳ chức năng.

Bất kỳ đầu mối nào tôi đã sửa chữa?

Đây là lớp:

package net.jansensan.geom 
{ 
    import flash.geom.Point; 

    /** 
    * @author Mat Janson Blanchet 
    */ 
    public class UpdatablePoint extends Point 
    { 
     private var _previousX : Number = 0; 
     private var _previousY : Number = 0; 
     private var _deltaX : Number = 0; 
     private var _deltaY : Number = 0; 

     // ******************************************************************** 
     //       [ PUBLIC METHODS ] 
     // ******************************************************************** 

     public function UpdatablePoint(x:Number=0, y:Number=0) 
     { 
      super(x, y); 
     } 

     override public function toString():String 
     { 
      return "(x=" + super.x + ", y=" + super.y + ", previousX=" + 
       _previousX + ", previousY=" + _previousY + ", deltaX=" + 
       _deltaX + ", deltaY=" + _deltaY + ")"; 
     } 

     // ******************************************************************** 
     //      [ GETTERS/SETTERS ] 
     // ******************************************************************** 

     override public function set x(x:Number):void 
     { 
      _previousX = super.x; 
      super.x = x; 
      _deltaX = super.x - _previousX; 
     } 

     override public function set y(y:Number):void 
     { 
      _previousY = super.y; 
      super.y = y; 
      _deltaY = super.y - _previousY; 
     } 

     public function get previousX():Number 
     { 
      return _previousX; 
     } 

     public function get previousY():Number 
     { 
      return _previousY; 
     } 

     public function get deltaX():Number 
     { 
      return _deltaX; 
     } 

     public function get deltaY():Number 
     { 
      return _deltaY; 
     } 
    } 
} 
+0

bạn có thể đưa văn bản chính xác của lỗi vào cả hai trường hợp không? Có và không có câu lệnh 'override'. Bạn có thể ghi đè thêm một hàm. – lunixbochs

Trả lời

5

Lớp Point không được triển khai bằng phương thức get/set, thay vì chỉ chứa các biến công khai: public var x : Numberpublic var y : Number. Xem tài liệu here.

Vì bạn không thể ghi đè bất kỳ getters hoặc setters nào bạn không thể phát hiện khi bất kỳ ai sử dụng lớp của bạn đang viết cho các biến này. Những gì bạn có thể làm là xóa extends Point và thêm một biến ví dụ Point vào UpdatablePoint của bạn. Sau đó thay đổi getters và setters của bạn cho x/y từ super. [X/y] thành myPointInstance. [X/y].

Nếu bạn cần để hiển thị thêm chức năng từ lớp Point, bạn có thể dễ dàng chỉ quấn nó. I E. Giả sử bạn muốn sử dụng phương thức 'equals' từ Point, chỉ cần tạo một bản sao của chữ ký phương thức đó và làm cho nội dung của nó chứa: return myPointInstance.equals(p);

2

Point không có public function set x hoặc public function set y.

Vì vậy, bạn không thể ghi đè chúng vì chúng không tồn tại. Điểm rất thấp, tôi đoán là Adobe không thêm các chức năng này để tránh sự gia tăng tình trạng quá tải.

Các vấn đề liên quan