2

パッケージはクラスとインターフェイスのコレクションであり、その内容を整理および分類するように設計されていることを私は知っています。また、クラスはオブジェクトの定義であり、両方の命令、それらの属性/変数、およびそれらの関数/メソッドであることも知っています。

しかし、私はまだインターフェースが何であるか、またはそれが実際に何のためにあるのかを理解していません...

私はアドビのウェブサイトでこの定義を読みました。

インターフェース

使用法

interface InterfaceName [extends InterfaceName ] {}

インターフェイスを定義します。インターフェイスは、一連のメソッドを定義するデータ型です。メソッドは、インターフェースを実装するすべてのクラスで定義する必要があります。

インターフェイスはクラスに似ていますが、次の重要な違いがあります。

•インターフェイスには、メソッドの宣言のみが含まれ、実装は含まれません。つまり、インターフェイスを実装するすべてのクラスは、インターフェイスで宣言された各メソッドの実装を提供する必要があります。

•メソッド定義にまたはInterfaceなどの属性を含めることはできませんが、実装されたメソッドは、インターフェイスを実装するクラスの定義のようにマークする必要があります。publicprivatepublic

•複数のインターフェイスは、ステートメントを使用してインターフェイスに継承することも、extendsステートメントを介してクラスに継承することもできますimplements

ActionScript 2.0とは異なり、ActionScript 3.0では、インターフェイス定義でgetterメソッドとsetterメソッドを使用できます。

...しかし、これはあいまいすぎて私には役立ちません。

誰かがActionScriptのインターフェースの目的と適切な実装および/または設計を知っていますか?

4

3 に答える 3

7

インターフェイスでは、基本的に「このクラスはこれらのことを実行できます」とアナウンスできます。

実際の例として、画面上のさまざまなコントロールのそれぞれを1つずつ強調表示するゲームのチュートリアルを作成することをお勧めします。各コントロールは、それ自体を強調表示するために点滅またはバウンスする可能性があるため、「IHighlightable」インターフェイスを実装し、残りを処理させることができます。

public interface IHighlightable {

    function highlight():void;

}

次に、コントロールで:

public class Control implements IHighlightable {

    public function highlight():void {
        // Bounce and flash!
    }

}

これは、次のようなことができることを意味します。

private function highlightControl(tutorialItem:IHighlightable):void {

    tutorialItem.highlight();

}

重要なのは、クラスに複数のインターフェースを実装させることができることです。これは、クラスが能力を共有する場合に役立ちますが、それらすべてに共通の基本クラスを拡張させることは意味がありません。

于 2013-03-19T22:00:32.520 に答える
1

インターフェースは契約です。メソッドの実装を強制するのはコンパイル時のメカニズムです。大規模なOOPコードベースでは、他のクラスを他のクラスではなくインターフェイスに依存させることがベストプラクティスであるため、インターフェイスを使用するコードを変更せずに実装を交換できます(この利点は、インターフェイスを使用することが非常に多いため、実際には議論の余地があります。も変更されます)。

インターフェイスは、複数の抽象クラス(1つのクラスしか拡張できませんが、任意の数のインターフェイスを実装できます)を継承せずに、ポリモーフィズムClassA型であるIFooIBar同時に)を実現するために導入されたJavaから借用されていると思います。

于 2013-03-20T03:50:34.660 に答える
0

私は技術的に間違っていますが、インターフェイスはC++抽象クラスに似ていると思います。


インターフェイスは、実際に実装せずにプロパティとメソッドを定義することを目的としています。また、インスタンス化することはできません

var test:FooInterface = new FooInterface() // would error
于 2013-03-19T22:36:51.797 に答える