Допустим, у вас был интерфейс IPerson, который определил двух членов - имя и пол:
public interface IPerson
{
function get name():String;
function set name(value:String):void;
function get gender:String;
function set gender(value:String):void;
}
... и у вас было два конкретных класса, Woman и Man, оба из которых реализовали интерфейс IPerson.
public class Man implements IPerson
{
private var _name:String;
private var _gender:String;
public function Man(name:String, gender:String)
{
this.name = name;
this.gender = gender;
}
public function get name():String
{
return _name;
}
public function set name(value:String):void
{
_name = value;
}
public function get gender()
{
return _gender;
}
public function set gender(value:String):void
{
_gender = value;
}
}
и
public class Woman implements IPerson
{
private var _name:String;
private var _gender:String;
public function Woman(name:String, gender:String)
{
this.name = name;
this.gender = gender;
}
public function get name():String
{
return _name;
}
public function set name(value:String):void
{
_name = value;
}
public function get gender()
{
return _gender;
}
public function set gender(value:String):void
{
_gender = value;
}
}
Вы могли бы в конечном итоге сделать что-то вроде этого:
var crowdOfPeople:ArrayCollection = YourCrowdOfPeopleClass.getInstance();
for each (var p:IPerson in crowdOfPeople)
{
trace(p.name);
trace(p.gender);
}
... то есть действовать (в этом случае отслеживать свойства) конкретных реализаций Мужчины и Женщины, как если бы они были объектом одного и того же типа, поскольку они оба соответствуют интерфейсу IPerson (т.е. , оба определяют имя и гендерные свойства).
Это объектно-ориентированный принцип полиморфизма в действии - иногда вы услышите его как принцип «Программируйте интерфейсы, а не реализации». Надеюсь, это поможет!