2009-06-19 9 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> 

Dans le code ci-dessus, IBrowserManager est une interface et BrowserManager.getInstance() retourne un objet de type IBrowserManager. Mais, de tout ce que je sais des interfaces, on ne peut pas créer une instance d'une interface? Alors, comment puis-je créer une instance d'une interface ici?question d'interface flexible

Répondre

5

Disons que vous aviez une interface, IPerson, qui a défini deux membres - le nom et le sexe:

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

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

... et vous avez eu deux classes concrètes, femme et homme, tous deux mis en œuvre le IPerson interface.

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

et

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

Vous pourriez alors en fin de compte faire quelque chose comme ceci:

var crowdOfPeople:ArrayCollection = YourCrowdOfPeopleClass.getInstance(); 

for each (var p:IPerson in crowdOfPeople) 
{ 
    trace(p.name); 
    trace(p.gender); 
} 

... qui est-à-dire agir (dans ce cas, tracer les propriétés de) les implémentations concrètes de l'Homme et de la Femme comme si elles étaient le même genre d'objet, puisqu'elles sont toutes les deux conformes à l'interface d'IPerson (les deux définissent les propriétés du nom et du genre).

C'est le principe orienté objet de polymorphism au travail - parfois vous l'entendrez comme le principe, "Programme aux interfaces, pas aux implémentations." J'espère que cela pourra aider!

3

Vous ne créez pas une instance d'une interface. Ce que vous obtenez là est une instance d'une classe qui implémente cette interface. Il est naturel que vous puissiez affecter une variable de type IBrowserManager, une instance de la classe BrowserManager qui implémente IBrowserManager.

Questions connexes