

Boa noite pessoal!
Hoje vou falar um pouco sobre Overloading (Sobrecarga) de métodos no AS3.
O que é “SobreCarga de Método”
Segundo o Wikipédia: “ Sobrecarga de método permite a existência de vários métodos de mesmo nome, porém com assinaturas levemente diferentes ou seja variando no número , tipo de argumentos , no valor de retorno e até variáveis diferentes. Ficará a cargo do compilador escolher de acordo com as listas de argumentos os procedimentos ou métodos a serem executados.”
Um exemplo em Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class Soma { public int Soma(int x, int y) { return x+y; } public String Soma(String x, String y) { return x+y; } public double Soma(double x, double y) { return x+y; } } |
Porém, infelizmente o ActionScript não possui essa característica
nativamente na sua versão atual, a 3.0.Entretanto, nós podemos simular esta
funcionalidade trabalhando com Namespaces no AS3.
Observem o exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package { import flash.display.Sprite; /** * ... * @author Robson Fernandes */ public class Main extends Sprite { //É definido uma namespace para cada método public namespace metodo1; public namespace metodo2; public function Main():void { //Invoca método 1 trace(metodo1::sobreCargaMetodo(1)); //Invoca método 2 trace(metodo2::sobreCargaMetodo(1, 2)); } //Sobrecarga 1 metodo1 function sobreCargaMetodo(arg0:Number):String { return "Método 1 => args {"+arg0+"}"; } //Sobrecarga 2 metodo2 function sobreCargaMetodo(arg0:Number,arg1:Number):String { return "Método 2 => args {"+arg0+","+arg1+"}"; } } } |
Vejam que os 2 métodos possuem o mesmo nome, porém as assinaturas são diferenciadas.
Caso precise utiliza-los através de um objeto instanciado,
terá que definir métodos para acessar a Namespace utilizada.
Como no exemplo a seguir:
1 2 3 4 5 6 7 8 9 10 11 12 |
//Retorna Namespace => Metodo1 public function getNameSpaceMetodo1():Namespace { return metodo1; } //Retorna Namespace => Metodo2 public function getNameSpaceMetodo2():Namespace { return metodo2; } ... |
1 2 3 4 5 6 7 |
var objeto:Main = new Main(); var metodo1:Namespace = objeto.getNameSpaceMetodo1(); var metodo2:Namespace = objeto.getNameSpaceMetodo2(); trace(objeto.metodo1::sobreCargaMetodo(1)); trace(objeto.metodo2::sobreCargaMetodo(1, 2)); |
Obrigado pessoal!.
Abs.
Robson Fernandes.




