2011-12-20 12 views
0

私は現在ActionScriptで新しく、クラスがInterfaceを実装するInterfaceおよびClassを作成しています。 srcとcomフォルダの両方にInterfaceとClassを作成しました。ここまで私が今までにしたコードです。FLEX 3、ActionScript 3.0でのActionScriptクラスおよびインターフェイスの操作中にエラーが発生する

インタフェース

package com 
{ 
    public interface TestData 
    { 
     function getInput(str:String):void 
     function getOutput():String 
    } 
} 

クラス

package com 
{ 
    public class EntityEL implements TestData 
    { 
     public var uname:String; 

     function getOutput():String 
     { 
      return uname; 
     } 

     function getInput(str:String):void 
     { 
      uname = str; 
     } 

     public function EntityEL() 
     { 

     } 
    } 
} 

MXMLファイル私はエラー "1044取得しています

public var etn:EntityEL = new EntityEL(); 

public function btnClick():void 
     { 
      etn.getInput(value.text); 
      Alert.show(etn.getOutput()); 
     } 


<mx:Button label="Button Click" click="{btnClick();}" /> 
<mx:TextInput id="value" /> 

:名前空間COMのインタフェース方式か、getInput:TESTDATAによって実装されていませんクラスcom:EntityEL。 "

この問題を解決するために私を助けてください。

+2

EntityELクラスの実装されたメソッドに 'public'を追加してみてください。私はクラスがインターフェイスを実装するときに、パブリックメソッドでなければならないと考えました。 – mask8

+0

答えをありがとう。 私は、Interfaceよりもpublicを宣言していますか?そのクラスを作成し、そのクラスのメソッドを呼び出します。 –

+1

まあ、インタフェースを定義する目的はそれぞれの場合によって異なります。ここの例では、インターフェイスを使用する他のクラスが存在しない場合、インターフェイスを作成する必要はないと思います。私はそれが公的であろうと私的なものであろうとは思わないのですか? – mask8

答えて

3

インターフェイスの考え方は、呼び出し元オブジェクトと呼び出し先オブジェクトの間の契約を定義することです。アクセスできるメソッド、必要なパラメータ、および返されるデータの種類。

その契約が意味を成すためには、「外界」がそれらを呼び出すことができるように、これらのメソッドにアクセス可能でなければなりません。

アクセス修飾子を省略すると、Flexコンパイラではデフォルトとしてinternalが使用されます。つまり、同じパッケージ内のクラスにはメソッドへのアクセス権があり、ある程度はこのコントラクトが満たされているようです。他の名前空間についても同様です。不思議なこと

Adobe clearly doesn't allow itあなたのメソッドの実装はpublicでなければなりません。それはあなたの意思だった場合 - パッケージのクラスだけがそれを実装するために許可されている、そしてそれは同様に、内部のあなたのAPIを維持する方法を離れるように

ただし、internalとしてあなたのインターフェイスを宣言することができます。

関連する問題