Actionscript 3 如何正确扩展AS3 Point类?

Actionscript 3 如何正确扩展AS3 Point类?,actionscript-3,oop,extend,Actionscript 3,Oop,Extend,我需要从我的观点中得到更多的信息,所以我想我应该添加一个previousX,previousY,这样我就可以得到一个deltaX和deltaY。现在,如果我创建一个简单的自包含类,它就可以正常工作 但是,我认为我希望扩展flash.geom.Point类,以从它提供的其他函数和计算中获益 所以我扩展了Point并根据需要修改了x和y设置器。当我编译时,我得到一个错误,即这些设置器在应该被覆盖时没有被标记为覆盖。所以我重写了,但是我得到一个错误,它说这些不会重写任何函数 知道我在哪里搞砸了吗 下面

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

但是,我认为我希望扩展flash.geom.Point类,以从它提供的其他函数和计算中获益

所以我扩展了Point并根据需要修改了x和y设置器。当我编译时,我得到一个错误,即这些设置器在应该被覆盖时没有被标记为覆盖。所以我重写了,但是我得到一个错误,它说这些不会重写任何函数

知道我在哪里搞砸了吗

下面是课堂:

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

点没有
公共功能集x
公共功能集y


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

点类没有使用get/set方法实现,而是只包含公共变量:
公共变量x:Number
公共变量y:Number
。请参阅文档

因为您不能重写任何公共getter或setter,所以当使用您的类的任何人正在写入这些变量时,您无法检测到。您可以做的是删除
扩展点
,并将
实例变量添加到可更新点。然后将x/y的getter和setter从super.[x/y]更改为myPointInstance.[x/y]


如果需要从Point类中公开更多功能,可以轻松地将其包装起来。也就是说,假设您想使用“equals”方法from Point,只需创建该方法签名的副本并使其主体包含:
return myPointInstance.equals(p)

您能在这两种情况下都包含错误的确切文本吗?使用和不使用
覆盖
语句。您可能正在重写一个额外的函数。