AS3:内部类和接口的编译器错误?

时间:2012-07-16 13:31:14

标签: actionscript-3 flash air flash-cs5

出于某些不相关的原因,我需要一堂课:

  1. MovieClip继承(直接或不继承)。
  2. 实现特定接口的
  3. (我们假设此接口为空,因为它不会改变任何问题)。
  4. 且其 .as 文件声明了内部类。
  5. 以下代码总结了这一点:

    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中对此进行了测试。

3 个答案:

答案 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)

如果这不能解决问题,我有另外一个想法,但首先尝试一下 点击文件
单击发布设置
单击设置按钮
取消选中自动声明舞台实例
单击确定