如何正确扩展AS3 Point类?

时间:2012-01-25 22:22:24

标签: actionscript-3 oop extend

我需要从我的观点获得更多信息,所以我想我会添加一个previousX,previousY以便我可以获得deltaX和deltaY。现在,如果我创建一个简单的自包含类,这可以正常工作。

但是,我想,我想扩展flash.geom.Point类,以便从它提供的其他功能和计算中受益。

所以我扩展了Point并根据需要修改了x和y setter。当我编译时,我得到一个错误,这些setter没有标记为覆盖它们应该是什么时候。所以我覆盖,但后来我得到一个错误,说这些不会覆盖任何函数。

我搞砸了的任何线索?

这是班级:

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;
        }
    }
}

2 个答案:

答案 0 :(得分:5)

Point类未使用get / set-methods实现,而是仅包含公共变量:public var x : Numberpublic var y : Number。请参阅文档here

由于您无法覆盖任何公共getter或setter,因此无法检测何时使用您的类的人正在写入这些变量。您可以做的是删除extends Point并向您的UpdatablePoint添加Point实例变量。然后将x / y的getter和setter从super。[x / y]更改为myPointInstance。[x / y]。

如果您需要从Point类公开更多功能,您可以轻松地将其包装起来。即假设您要使用Point中的'equals'方法,只需创建该方法签名的副本并使其正文包含:return myPointInstance.equals(p);

答案 1 :(得分:2)

点没有public function set xpublic function set y

所以你不能覆盖它们,因为它们不存在。 Point是非常低级的,我的猜测是Adobe没有添加这些函数来避免过载的增加。