覆盖现有的AS3类

时间:2010-05-23 14:08:36

标签: actionscript-3

对于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()方法),或者只是我们不能?

感谢。

2 个答案:

答案 0 :(得分:2)

您正在谈论的功能称为协变返回类型(http://en.wikipedia.org/wiki/Covariant_return_type)。例如,C ++和Java就有这个功能,唉,ActionScript没有。

答案 1 :(得分:1)

你不能,因为要覆盖你必须保持相同的功能签名。 好消息是,由于你的'Vector2'类是一个Point,你可以拥有一个创建Vector2对象并将其作为Point返回的函数。 (你可以在需要时把它扔掉)