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类型的对象。但是,根据我对接口的了解,不能创建接口的实例吗?那么,我怎么能在这里创建一个接口的实例呢?

4

2 回答 2

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);
}

...也就是说,对 Man 和 Woman 的具体实现采取行动(在这种情况下,跟踪其属性),就好像它们是同一种对象一样,因为它们都符合 IPerson 接口(即两者定义名称和性别属性)。

它是面向对象的多态性原则在起作用——有时您会听到它作为信条,“编程到接口,而不是实现”。希望有帮助!

于 2009-06-19T14:45:41.590 回答
3

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

于 2009-06-19T09:35:32.950 回答