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