La classe è il solo elemento del linguaggio di ActionScript 3.0 in grado di implementare un'interfaccia. Per implementare una o più interfacce, utilizzate la parola chiave implements nella dichiarazione della classe. Negli esempi seguenti vengono definite due interfacce, IAlpha e IBeta, e una classe, Alpha, che le implementa entrambe:
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 {}
}
In una classe che implementa un'interfaccia, i metodi implementati devono:
Utilizzare l'identificatore del controllo di accesso public.
Utilizzare lo stesso nome del metodo di interfaccia.
Avere lo stesso numero di parametri, ciascuno con tipi di dati corrispondenti ai tipi di dati dei parametri del metodo di interfaccia.
Utilizzare lo stesso tipo restituito.
public function foo(param:String):String {}
È tuttavia possibile scegliere quale nome assegnare ai parametri dei metodi implementati. Anche se il numero dei parametri e il tipo di dati di ciascun parametro del metodo implementato devono corrispondere a quelli del metodo di interfaccia, i nomi dei parametri possono essere differenti. Nell'esempio precedente, il parametro del metodo Alpha.foo() è denominato param:
Mentre è denominato str nel metodo di interfaccia IAlpha.foo():
function foo(str:String):String;
Potete disporre di una certa flessibilità anche per quanto riguarda i valori di parametro predefiniti. Una definizione di interfaccia può includere dichiarazioni di funzioni con valori di parametro predefiniti. Un metodo che implementa una tale dichiarazione di funzione deve avere un valore di parametro predefinito che sia membro dello stesso tipo di dati del valore specificato nella definizione di interfaccia, anche se il valore vero e proprio può essere differente. Ad esempio, il codice seguente definisce un'interfaccia che contiene un metodo con un valore di parametro predefinito 3:
interface IGamma
{
function doSomething(param:int = 3):void;
}
La definizione di classe seguente implementa l'interfaccia IGamma, ma impiega un valore di parametro predefinito differente:
class Gamma implements IGamma
{
public function doSomething(param:int = 4):void {}
}
Il motivo di questa flessibilità sta nel fatto che le regole di implementazione dell'interfaccia sono state specificamente studiate per garantire la compatibilità dei tipi di dati e per raggiungere tale obiettivo non è richiesta una corrispondenza dei nomi dei parametri e dei valori predefiniti.