2009-06-19 56 views
2
<?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> 

在上面的代码,IBrowserManager是一个接口,和BrowserManager.getInstance() 返回类型IBrowserManager的对象。但是,无论从任何我所知道的接口, 一个不能创建一个接口的实例?所以,我怎么就可以创建一个实例这里的接口 ?柔性接口问题

回答

5

比方说,你有一个接口,IPerson,即定义了两个成员 - 姓名和性别:

public interface IPerson 
{ 
    function get name():String; 
    function set name(value:String):void; 

    function get gender:String; 
    function set gender(value:String):void; 
} 

...你有两个具体的类,女人和男人,这两者的实现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接口的具体实现(即两者定义的名字和性别属性)。

这是在工作的polymorphism面向对象的原则 - 有时你会听到它为宗旨,以“面向接口编程,而不是实现。”希望有所帮助!

3

你不创建一个接口的实例。你得到的是一个实现该接口的类的实例。可以分配到类型IBrowserManager,类BrowserManager的一个实例,实现IBrowserManager的一个变量,它是很自然的。