Hoje vou mostrar uma bom jeito de se implementar uma classe abstrata em Actionscript 3.0. Para quem trabalha em equipe de programadores é uma boa prática, pois ajuda bastante no encapsulamento do código e não engessa a manutenção no futuro.
Um bom exemplo seria de um componente (AbstractLayout) que dispõe elementos na tela horizontalmente e verticalmente, e você teve que implementar o cálculo desse posicionamente baseado numa flag. Então, para deixar explícito esses dois tipos de disposição, você poderia criar a HorizontalLayout e VerticalLayout que estenderiam a AbstractLayout, mudando a flag de disposição internamente. Isso também melhora o encapsulamento, pois se houver algum comportamento específico para alguma das super classes, esse comportamento pode ser implementado sem interfirir na sub classe.
Enfim, vamos ao código. A implementação é muito simples, é feito uma comparação se a instância passada no argumento é o this, senão é lançado um erro.
1: package net.idemax.abstractclass
2: {
3: import flash.errors.IllegalOperationError;
4:
5: public class AbstractClass
6: {
7: public function AbstractClass( $instance:AbstractClass )
8: {
9: if( $instance != this )
10: throw new IllegalOperationError( 'Essa é uma classe abstrata, estenda-a para usá-la.' );
11: }
12: }
13: }
E é só usá-la como sub classe, passando o this no super. Por exemplo:
1: package net.idemax.superclass
2: {
3: import net.idemax.abstractclass.AbstractClass;
4:
5: public class SuperClass extends AbstractClass
6: {
7: public function SuperClass()
8: {
9: super( this );
10: }
11: }
12: }
Assim, podemos usar todas as funcionalidades da AbstractClass e da SuperClass sem instanciar diretamente a AbstractClass.
1: package
2: {
3: import flash.display.Sprite;
4:
5: import net.idemax.superclass.SuperClass;
6:
7: public class SuperClassUsage extends Sprite
8: {
9: public function SuperClassUsage()
10: {
11: var mySuperClass:SuperClass = new SuperClass();
12: }
13: }
14: }
Fonte: http://goo.gl/UG6R9
PS.: Estou usando esse plugin do Windows Live Writer para formatar o código fonte, infelizmente ele não suporta Actionscript. Se souberem de algum, me enviem.