2

いくつかの無関係な理由で、クラスが必要です:

  1. から (直接または非) 継承しMovieClipます。
  2. 特定のインターフェイスを実装します (問題に何も変更しないため、このインターフェイスは空であると仮定しましょう)。
  3. その.asファイルは内部クラスを宣言します。

次のコードはこれをまとめたものです。

package {
    import flash.display.MovieClip;
    public class MyClass extends MovieClip implements EmptyInterface { }
}

class MyInnerClass { }

上記のコードの問題は、常にコンパイルされるとは限らないことです。MyClassライブラリの項目の 1 つにLinkageを使用するとすぐに、コンパイラMyClassは のサブクラスではないことについて不平を言いMovieClipます。一方、手動でインスタンス化してステージに追加すると、すべてがうまく機能します。

その非常に特定のケースでは、インターフェースと内部クラスがどういうわけか相互に排他的であるように見えます。実際、内部クラスを削除すると、そのエラーはもうありません。

package {
    import flash.display.MovieClip;
    public class MyClass extends MovieClip implements EmptyInterface { }
}

実装されたインターフェイスを削除しても同じですが、内部クラスは保持します。

package {
    import flash.display.MovieClip;
    public class MyClass extends MovieClip { }
}

class MyInnerClass { }

これは Flash CS5 でのみテストしたことに注意してください。

4

3 に答える 3

1

コンパイラのバグだと思います。

私はテストしたところ、プライベートクラスはそうでないクラスを拡張する必要があることがわかりましたObject。クラスを拡張する代わりに、任意のインターフェースを実装することもできます。

これは、クラスをより深いパッケージに入れても同じように機能します。

私はこれをFlashCS6でテストしました。

于 2012-07-17T13:16:00.743 に答える
0

これで問題が解決しない場合は、別のアイデアがありますが、最初にこれを試してください。
ファイル
をクリックする公開設定を
クリックする設定ボタンをクリックする
チェックを外すステージインスタンスを自動的に宣言する
[OK ]をクリックする

于 2012-07-18T00:57:15.460 に答える
0

私が正しく読んでいれば、内部クラスを拡張するパブリック クラスが必要ですか? -内部クラスを独自のパッケージ ファイルとして宣言する限り、これを行うことを妨げるものは何もありません。

ドキュメントによると:

[dynamic] [public | internal] [final] class className [ extends superClass ] [ implements interfaceName[, interfaceName... ] ] { 
    // class definition here
}



それがあなたに悲しみを与えているインターフェースである場合、それを別のファイルでも宣言しましたか?それをインポートしますか? コメントで回避されているように、名前空間のスコープは、エスカレートする優先度が何であるかをコンパイラが理解できるようにするために重要です。

例えば:

package my.example {
   public interface EmptyInterface
   {
   }
}

となることによって:

package {
    import flash.display.MovieClip;
    import my.example.EmptyInterface;
    public class MyClass extends MovieClip implements EmptyInterface { }
}
于 2012-07-16T22:01:58.930 に答える