views:

48

answers:

2

I have

    public function Shard() {
    }

    public function Shard(x:Number, y:Number, vx:Number, vy:Number, rotation:Number, spin:Number)
    {
      ...
    }

And I got on the second constructor:

Multiple constructor definitions found. Constructor may not be defined in code.

So, ActionScript-3 cannot have multiple constructors?

+6  A: 

No you can't have multiple contructor neither the same function with different signature, but you can use default arguments :

public function Shard(x:Number=NaN, y:Number=NaN) {
  //...
}

then you can call new Shard() or new Shard(100) or new Shard(100, 200)

or you can also use variable arguments:

public function Shard(...args){
 if (args.length==0) {
   //...
 } else {
  //...
  var firstArg:Object=args[0];
  //...
 }
}
Patrick
+3  A: 

It's even broader than that. AS3 has no support at all for function overloading.

You can simulate the appearance of multiple constructors with parameter defaults and/or dynamically dispatching the parameters to various init methods. Alternatively, custom object factories or static creation methods could help.

Gunslinger47
+1. I've used static methods for initializing and returning a new instances (kind of like factories). Generally, these methods are defined in the same class and are only meant to simplify the interface for the calling code. It's a simple and effective workaround in some cases (though if you want to have different of these "constructors" you have to do the name mangling since the compiler doesn't do it for you)
Juan Pablo Califano