フレックスインターフェイスの質問
-
06-07-2019 - |
質問
<?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型のオブジェクトを返します。しかし、私がインターフェースについて知っていることから、 インターフェイスのインスタンスを作成できませんか?それで、どうしてインスタンスを作成できますか ここのインターフェースの?
解決
名前と性別の2つのメンバーを定義したIPersonというインターフェースがあったとしましょう:
public interface IPerson
{
function get name():String;
function set name(value:String):void;
function get gender:String;
function set gender(value:String):void;
}
...そして、女性と男性の2つの具体的なクラスがあり、どちらも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;
}
}
and
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インターフェイスに準拠しているため、ManとWomanの具象実装が同じ種類のオブジェクトであるかのように動作します(この場合、プロパティをトレースします) 、両方とも名前と性別のプロパティを定義します)。
これは、ポリモーフィズムのオブジェクト指向の原則です。 「実装ではなく、インターフェイスへのプログラム」という教義としてそれを聞いてください。役に立てば幸いです!
他のヒント
インターフェイスのインスタンスを作成しません。そこにあるのは、そのインターフェースを実装するクラスのインスタンスです。 IBrowserManagerを実装するBrowserManagerクラスのインスタンスであるIBrowserManager型の変数に割り当てることができるのは当然です。
所属していません StackOverflow