对于flash.geom.Point中的自定义派生类“ Vector2 ”,尝试覆盖 clone()方法时(类似于 add() ,减去()将返回类型本身的方法),它总会抱怨不兼容的覆盖'因为返回类型已从“点”更改到“Vector2”。
import flash.geom.Point;
public class Vector2 extends Point
{
//Constructor is good
public function Vector2(x:Number = 0, y:Number = 0)
{
super(x,y);
}
// Error: Incompatible overriding
override public function clone():Vector2 //return type has to be "Point"
{
return new Vector2(this.x , this.y);
}
}
我们如何才能正确地重用/覆盖超级类提供的方法,因为它们应该创建我们自己的方法(例如:一个新的clone1()方法),或者只是我们不能?
感谢。
答案 0 :(得分:2)
您正在谈论的功能称为协变返回类型(http://en.wikipedia.org/wiki/Covariant_return_type)。例如,C ++和Java就有这个功能,唉,ActionScript没有。
答案 1 :(得分:1)
你不能,因为要覆盖你必须保持相同的功能签名。 好消息是,由于你的'Vector2'类是一个Point,你可以拥有一个创建Vector2对象并将其作为Point返回的函数。 (你可以在需要时把它扔掉)