views:

134

answers:

1

I'm extending the AS3 class Rectangle with a class called Bin. I want to override the Rectangle clone() method with a method that returns a Bin object, not a Rectangle object. If I try to override the clone method but specify Bin as the return type, I get a #1023: Incompatible override error. Here's my Bin class:

package {

    import flash.geom.Rectangle;

    public class Bin extends Rectangle {

        public function Bin(x:Number = 0, y:Number = 0, width:Number = 0, height:Number = 0) {
            super(x, y, width, height);
        }

        override public function clone():Rectangle {
            return new Bin(x, y, width, height);
        }

    }

}

This class works, but when I use the clone() method to create a new Bin instance, I get type errors when I try to use the Bin methods on the new instance.

How do I override clone() and send an actual Bin instance?

+3  A: 

Technically, you can't change the signature when you override a method. In your case, though, its not a huge problem. You just have to cast the resulting object to type Bin after calling the clone method.

Gabriel McAdams
Thanks, that's what I figured.
wmid