dha*_*0us 2 apache-flex actionscript interface instance
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Label id="lb" text="check"/>
<mx:Script>
<![CDATA[
import mx.managers.BrowserManager;
import mx.managers.IBrowserManager;
public var brm:IBrowserManager = BrowserManager.getInstance();
]]>
</mx:Script>
</mx:WindowedApplication>
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,IBrowserManager是一个接口,BrowserManager.getInstance()返回一个IBrowserManager类型的对象.但是,根据我所知的接口,无法创建接口的实例?那么,为什么我可以在这里创建一个接口实例?
假设您有一个界面IPerson,它定义了两个成员 - 名称和性别:
public interface IPerson
{
function get name():String;
function set name(value:String):void;
function get gender:String;
function set gender(value:String):void;
}
Run Code Online (Sandbox Code Playgroud)
......你有两个具体的课程,女人和男人,两者都实现了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;
}
}
Run Code Online (Sandbox Code Playgroud)
和
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以最终做这样的事情:
var crowdOfPeople:ArrayCollection = YourCrowdOfPeopleClass.getInstance();
for each (var p:IPerson in crowdOfPeople)
{
trace(p.name);
trace(p.gender);
}
Run Code Online (Sandbox Code Playgroud)
...也就是说,作为(在这种情况下,追踪属性)的男人和女人的具体实现,就像它们是同一种对象一样,因为它们都符合IPerson界面(即两者都是定义名称和性别属性).
这是面向对象的多态性原理 - 有时你会听到它作为一个原则,"程序接口,而不是实现." 希望有所帮助!