En continuação a série de tutoriais sobre AS3…
Hoje vamos tomar especial atenção à possibilidade de alterar uma classe “pai” para que possamos controlar, modificar ou até substituir os dados de determinada função dessa mesma class. No action script este tipo de operação pode ser feito usando a palavra override, é dela que vamos falar hoje.
5.4. Re-Escrever métodos em classes.
Outro ponto muito util é no caso de já termos uma class totalmente feita, mas necessitamos de outra igual mas que substitua ou invalide uma ou outra função da class pai. Este método chama-se override, quem em português será parecido com re-escrever, ou seja, escrever por cima / substituir determinados pontos. De notar que só é possivel utilizar este método override em funções que tenham sido declaradas como public, por exemplo:
}
Para demonstrar este método, teremos que fazer algumas alterações na nossa classe que criamos anteriormente, já que é esse exemplo que será usado.
Vamos inicar com o exemplo da nossa ultima class criada e vamos escrever o simples código:
return PANEL_DATE + " - " + PANEL_H + "-" + PANEL_W + "-" + PANEL_TITLE;
}
Adicionando esta função a nossa class devolveria uma suposta string de informação do nosso painel.
Ficando a class assim:
{
public class fullDef extends def
{
public const PANEL_DATE:String = "20/09/2008";
public function fullDef()
{
}
public function painelInfo():String {
return PANEL_DATE + " - " + PANEL_H + "-" + PANEL_W + "-" + PANEL_TITLE;
}
}
}
O meu objectivo vai ser criar uma class que irá extender esta anterior e evitar que ela devolva qualquer valor quando for chamada a função painelInfo() ou que devolva um valor por mim definido. Para efectuar esta acção exste um método chamado override que vou passar a explicar.
Criando uma nova class que irá extender esta, ficamos asism:
{
public class customFullDef extends fullDef
{
public function customFullDef()
{
super();
}
}
}
aqui a class apenas se encontra extendida, e se a função painelInfo() está disponivel nela e vai devolver:
podem testar da seguinte forma:
trace ("->"+cfdef.painelInfo());
//o resultado será "->20/09/2008 - 300 - 400 - Painel personalizado
Quando esta função for chamada, o que eu quero é evitar que esta se comporte da mesma maneira, para isso adiciono:
return "Painel Protegido / sem definições";
}
à class, ficando assim:
{
public class customFullDef extends fullDef
{
public function customFullDef()
{
super();
}
override protected function painelInfo():String {
return "Painel Protegido / sem definições";
}
}
}
se agora chamar a class:
trace ("->"+cfdef.painelInfo());
//o resultado será "-> Painel Protegido / sem definições"
como podem ver podemos interceptar, substituir, incrementar ou até eliminar por completo a utilidade de uma função / metodos normais, mas devem ter em especial atenção que o override não funciona em nenhum dos seguintes tipos/objetos:
- Variaveis
- Constantes
- Objetos/Métodos static (estaticos)
- Métodos que implementam uma interface
- Métodos que sejam marcados como final.
No caso em cima foi substituida a resposta normal da nossa class de origem e atribuida uma nova resposta quando essa função for chamada.
Bom, por hoje é tudo, e não se esqueçam que podem ter acesso a todos os tutoriais até aqui escritos aqui.
Duvidas? Use o fórum.
Abraço.




Um Comentário
Sem dúvida mais um otimo trabalho importante pra gente.
Parabens