【发布时间】:2012-07-16 13:31:13
【问题描述】:
由于一些不相关的原因,我需要一个类:
- 从
MovieClip继承(直接或不继承)。 - 实现了一个特定的接口(假设这个接口是空的,因为它不会改变任何问题)。
- 并且其 .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 中对此进行了测试。
【问题讨论】:
-
我的猜测是 EmptyInterface 会阻塞一些 MovieCLips 函数,当链接时编译器正在测试这些函数。
-
内部类可能会导致问题,因为它在顶级包中的默认范围为
internal。您是否尝试过使用完全限定的包名? -
@The_asMan 不太明白你说的是什么,但是如果接口是问题的原因,为什么当我删除内部类声明并保留接口时代码工作?
-
@weltraumpirat 我确实尝试使用不是顶级的包并且仍然引发错误(5000:类'src.MyClass'必须子类'flash.display.MovieClip',因为它是链接的到该类型的库符号。)
标签: actionscript-3 flash air flash-cs5