La classe est le seul élément du langage ActionScript 3.0 qui puisse implémenter une interface. Pour implémenter une ou plusieurs interfaces, on utilise le mot-clé implements dans une déclaration de classe. L’exemple suivant définit deux interfaces, IAlpha et IBeta, ainsi qu’une classe, Alpha, qui les implémente toutes deux :
interface IAlpha
{
function foo(str:String):String;
}
interface IBeta
{
function bar():void;
}
class Alpha implements IAlpha, IBeta
{
public function foo(param:String):String {}
public function bar():void {}
}
Dans une classe qui implémente une interface, les méthodes implémentées doivent :
Utiliser l’identificateur de contrôle d’accès public.
Utiliser le même nom que la méthode de l’interface.
Avoir le même nombre de paramètres, chacun d’eux étant du type de données correspondant à celui du paramètre équivalent dans la méthode de l’interface.
Utiliser le même type de retour.
public function foo(param:String):String {}
Vous disposez toutefois d’une certaines souplesse pour le nom des paramètres des méthodes que vous implémentez. Bien que le nombre et le type de données des paramètres de la méthode implémentée doivent correspondre à ceux de la méthode de l’interface, il n’est pas obligatoire que les noms des paramètres soient identiques. Par exemple, dans l’exemple ci-dessus, le paramètre de la méthode Alpha.foo() est appelé param.
Par contre, le paramètre correspondant est appelé str dans la méthode de l’interface IAlpha.foo() :
function foo(str:String):String;
Les valeurs par défaut des paramètres offrent également une certaine souplesse. La définition d’une interface peut comporter des déclarations de fonctions avec des valeurs par défaut pour les paramètres. Une méthode qui implémente l’une de ces déclarations de fonction doit disposer d’une valeur par défaut pour le ou les paramètres. Cette valeur doit être du même type de
données que celle qui est spécifiée dans la définition de l’interface, mais ce n’est pas forcément le cas pour la valeur réelle. Par exemple, le code ci-dessous définit une interface contenant une méthode dont le paramètre a la valeur 3 par défaut :
interface IGamma
{
function doSomething(param:int = 3):void;
}
La définition de classe suivante implémente l’interface Igamma, mais utilise une autre valeur par défaut pour le paramètre :
class Gamma implements IGamma
{
public function doSomething(param:int = 4):void {}
}
Cette souplesse est due au fait que les règles d’implémentation d’une interface sont spécifiquement conçues afin d’assurer une compatibilité des types de données ; il n’est pas nécessaire, pour ce faire, d’exiger des noms et des valeurs par défaut identiques pour les paramètres.