出于某些不相关的原因,我需要一堂课:
MovieClip
继承(直接或不继承)。以下代码总结了这一点:
package {
import flash.display.MovieClip;
public class MyClass extends MovieClip implements EmptyInterface { }
}
class MyInnerClass { }
上面代码的问题是它不会总是编译。只要我将MyClass
用作 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中对此进行了测试。
答案 0 :(得分:1)
我说这是编译器的错误。
我测试过并发现私有类必须扩展任何不是Object
的类。它不是扩展类,也可以实现任何接口。
即使我把课程放到更深的包中,这也是一样的。
我用Flash CS6对此进行了测试。
答案 1 :(得分: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 { }
}
答案 2 :(得分:0)
如果这不能解决问题,我有另外一个想法,但首先尝试一下
点击文件
单击发布设置
单击设置按钮
取消选中自动声明舞台实例
单击确定