Een klasse is het enige taalelement in ActionScript 3.0 dat een interface kan implementeren. Gebruik het trefwoord
implements
in een klassendeclaratie om een of meer interfaces te implementeren. Het volgende voorbeeld definieert twee interfaces, IAlpha en IBeta
,
en een klasse, Alpha, die beide implementeert:
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 een klasse die een interface implementeert, moeten de geïmplementeerde methoden het volgende doen:
-
De toegangsbeheer-id
public
gebruiken.
-
Dezelfde naam gebruiken als de interfacemethode.
-
Hetzelfde aantal parameters hebben, elk met gegevenstypen die overeenkomen met de gegevenstypen van de interfacemethodeparameter.
-
Hetzelfde retourneringstype gebruiken.
public function foo(param:String):String {}
U hebt niettemin enige flexibiliteit bij het benoemen van de parameters van de methoden die u implementeert. Hoewel het aantal parameters en het gegevenstype van elke parameter in de geïmplementeerde methode overeen moet komen met die van de interfacemethode, hoeven de namen van de parameters niet overeen te komen. In het vorige voorbeeld heeft de parameter van de methode
Alpha.foo()
de naam
param
:
Maar de parameter in de interfacemethode
IAlpha.foo()
heeft de naam
str
:
function foo(str:String):String;
U hebt tevens enige flexibiliteit met standaardparameterwaarden. Een interfacedefinitie kan functiedeclaraties met standaardparameterwaarden bevatten. Een methode die een dergelijke functiedeclaratie implementeert, moet een standaardparameterwaarde hebben die lid is van hetzelfde gegevenstype als de waarde die is opgegeven in de interfacedefinitie, maar de daadwerkelijke waarde hoeft niet overeen te komen. De volgende code definieert bijvoorbeeld een interface die code bevat met een standaardparameterwaarde 3:
interface IGamma
{
function doSomething(param:int = 3):void;
}
De volgende klassendefinitie implementeert de interface Igamma, maar gebruikt een andere standaardparameterwaarde:
class Gamma implements IGamma
{
public function doSomething(param:int = 4):void {}
}
De reden voor deze flexibiliteit ligt in het feit dat de regels voor het implementeren van een interface specifiek ontworpen zijn voor het verzekeren van de compatibiliteit tussen gegevenstypen en identieke parameternamen; standaardparameterwaarden zijn niet nodig om dit te realiseren.