2012-01-25 14 views
5

मुझे अपने बिंदुओं से थोड़ी अधिक जानकारी की आवश्यकता है, इसलिए मैंने सोचा कि मैं एक पिछला एक्स जोड़ूंगा, पिछली बार ताकि मैं डेल्टाएक्स और डेल्टा प्राप्त कर सकूं। अब, अगर मैं एक सरल आत्मनिर्भर वर्ग बना देता हूं तो यह ठीक काम करता है।मैं एएस 3 प्वाइंट क्लास को सही तरीके से कैसे बढ़ा सकता हूं?

मुझे लगता है कि, हालांकि, मैं अन्य कार्यों और गणनाओं से लाभ प्राप्त करने के लिए flash.geom.Point क्लास का विस्तार करना चाहता हूं।

तो मैंने प्वाइंट बढ़ाया और मुझे आवश्यकतानुसार एक्स और वाई सेटर्स को संशोधित किया। जब मैं संकलित करता हूं, तो मुझे एक त्रुटि मिलती है कि इन सेटर्स को ओवरराइड के लिए चिह्नित नहीं किया जाना चाहिए। तो मैं ओवरराइड करता हूं, लेकिन फिर मुझे एक त्रुटि मिलती है जो कहती है कि ये किसी भी फ़ंक्शन को ओवरराइड नहीं करते हैं।

कोई सुराग जहां मैंने खराब किया?

यहाँ वर्ग है:

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

क्या आप दोनों मामलों में त्रुटियों का सटीक पाठ शामिल कर सकते हैं? 'ओवरराइड' कथन के साथ और बिना। आप एक अतिरिक्त समारोह ओवरराइड कर सकते हैं। – lunixbochs

उत्तर

5

Point वर्ग, प्राप्त/सेट तरीकों का उपयोग कर लागू नहीं है बल्कि यह केवल सार्वजनिक चर होते हैं: public var x : Number और public var y : Number। प्रलेखन here देखें।

चूंकि आप किसी भी सार्वजनिक गेटर्स या सेटर्स को ओवरराइड नहीं कर सकते हैं, इसलिए आप यह पता नहीं लगा सकते कि आपकी कक्षा का उपयोग करने वाले प्रत्येक व्यक्ति इन चरों पर लिख रहा है। आप क्या कर सकते हैं extends Point को हटाएं और Point इंस्टेंस वैरिएबल को अपने अपडेटटेबल पॉइंट में जोड़ें। फिर सुपर से एक्स/वाई के लिए अपने गेटर्स और सेटर्स को बदलें। [X/y] myPointInstance पर। [X/y]।

यदि आपको प्वाइंट क्लास से अधिक कार्यक्षमता का पर्दाफाश करने की आवश्यकता है, तो आप इसे आसानी से लपेट सकते हैं। अर्थात। मान लें कि आप प्वाइंट से 'बराबर' विधि का उपयोग करना चाहते हैं, बस उस विधि हस्ताक्षर की प्रति बनाएं और उसके शरीर को इसमें शामिल करें: return myPointInstance.equals(p);

2

प्वाइंट public function set x या public function set y जरूरत नहीं है।

तो आप उन्हें ओवरराइड नहीं कर सकते क्योंकि वे मौजूद नहीं हैं। प्वाइंट बहुत कम स्तर है, मेरा अनुमान यह होगा कि एडोब ने अधिभार में वृद्धि से बचने के लिए इन कार्यों को नहीं जोड़ा है।

संबंधित मुद्दे