jan*_*san 5 oop actionscript-3 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
本Point
类使用get/set方法的方法没有实现,而它仅包含公共变量:public var x : Number
和public var y : Number
.请参阅此处的文档.
由于您无法覆盖任何公共getter或setter,因此您无法检测何时使用您的类的人正在写入这些变量.你可以做的是删除并向你的UpdatablePoint extends Point
添加一个Point
实例变量.然后将x/y的getter和setter从super.[x/y]更改为myPointInstance.[x/y].
如果需要从Point类公开更多功能,可以轻松地将其包装起来.也就是说你想使用Point中的'equals'方法,只需创建该方法签名的副本并使其包含:return myPointInstance.equals(p);