Klasa jest jedynym elementem języka ActionScript 3.0, który może implementować interfejs. Aby zaimplementować jeden lub większą liczbę interfejsów, należy umieścić w deklaracji klasy słowo kluczowe
implements
. W poniższym przykładzie zdefiniowano dwa interfejsy, IAlpha oraz IBeta
,
a także klasę Alpha, która implementuje oba te interfejsy:
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 {}
}
W klasie, która implementuj interfejs, zaimplementowane metody muszą charakteryzować się następującymi cechami:
-
Muszą być zadeklarowane ze specyfikatorem dostępu
public
.
-
Muszą mieć te same nazwy, co odpowiednie metody w interfejsie.
-
Muszą mieć tę samą liczbę parametrów o tych samych typach, co odpowiednie metody w interfejsie.
-
Muszą zwracać wartości tego samego typu, co odpowiednie metody w interfejsie.
public function foo(param:String):String {}
Programista ma jednak pewną swobodę w nadawaniu nazw parametrom implementowanych metod. Mimo że liczba parametrów i ich typy danych w zaimplementowanej metodzie muszą być identyczne, jak w metodzie zadeklarowanej w interfejsie, nazwy parametrów nie muszą być identyczne. W poprzednim przykładzie parametr metody
Alpha.foo()
ma nazwę
param
:
Jednak w metodzie
IAlpha.foo()
zadeklarowanej w interfejsie ten sam parametr ma nazwę
str
:
function foo(str:String):String;
Możliwe jest także swobodne określanie wartości domyślnych parametrów. Definicja interfejsu może zawierać deklaracje funkcji z domyślnymi wartościami parametrów. Metoda implementująca taką deklarację funkcji musi mieć wartość domyślną parametru należącą do tego samego typu danych, co wartość określona w definicji interfejsu, ale wartości te nie muszą być równe. Na przykład w poniższym kodzie zdefiniowano interfejs zawierający metodę z parametrem o wartości domyślnej 3:
interface IGamma
{
function doSomething(param:int = 3):void;
}
Poniższa definicja klasy implementuje interfejs Igamma, ale z inną domyślną wartością parametru:
class Gamma implements IGamma
{
public function doSomething(param:int = 4):void {}
}
Swoboda ta wynika z faktu, że reguły implementacji interfejsów opracowano z myślą o zgodności typów danych, ale wymów identycznych nazw parametrów i domyślnych ich wartości nie jest niezbędny do zapewnienia takiej zgodności.