2

由于一些不相关的原因,我需要一个类:

  1. 继承(直接或不)从MovieClip.
  2. 它实现了一个特定的接口(让我们假设这个接口是空的,因为它不会改变任何问题)。
  3. 并且其.as文件声明了内部类。

以下代码总结了这一点:

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

class MyInnerClass { }

上面代码的问题是它不会总是编译。一旦我将库的一个项目MyClass用作链接,编译器就会抱怨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. 除了扩展类,它还可以实现任何接口。

即使我将类放入更深的包中,这也是一样的。

我已经用 Flash CS6 对此进行了测试。

于 2012-07-17T13:16:00.743 回答
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 回答
0

如果这不能解决它,我有另一个想法,但先试试这个。
单击文件
单击发布设置
单击设置按钮
取消选中自动声明阶段实例
单击确定

于 2012-07-18T00:57:15.460 回答