Flash Builder不会让我覆盖继承的方法。我很困惑

时间:2012-01-21 19:29:07

标签: actionscript-3 flash-builder override

我已经写了近十年的ActionScript了。但我总是使用单独的文本编辑器(如TextMate)来编写代码并使用Flash IDE进行编译。我决定在本周末尝试使用Flash Builder,因为它显然是前进的方向。

反正。我在OSX上使用Flash Builder 4.6 - 今天早上安装了,我还没有用它 - 我构建了一个简单的“Actionscript移动应用程序”(因为我目前的工作项目是一个移动通信应用程序,正在构建Flash IDE)。

package
{
    import zakariya.layout.RootLayoutSprite;

    public class DoesThisEvenWork extends RootLayoutSprite
    {
        public function DoesThisEvenWork()
        {
            super();

            trace( "hello... what's my size: " + this.size );
        }
    }

    override public function onLayoutUpdated():void
    {
        super.onLayoutUpdated();

    }

    override public function onSizeChanged():void
    {
        super.onSizeChanged();
        trace( 'onSizeChanged..., new size: ' + this.size );   
    }
}

类RootLayoutSprite派生自LayoutSprite,是我编写的布局管理API的一部分,已用于大量和小型的几十个项目中。 onLayoutUpdated和onSizeChanged方法在LayoutSprite中定义,以及size属性。

定义看起来或多或少如此:

package zakariya.layout 
{
    public class LayoutSprite extends Sprite {

        /*
            Called after this Sprite's size changes, before layout of children is executed
        */
        public function onSizeChanged():void
        {}

        /*
            Called after this Sprite's size changes, after layout of children is executed
        */
        public function onLayoutUpdated():void
        {}


    }
}

zakariya.layout代码是本地仓库中的原始代码 - 未编译为SWC - 它全部位于我添加到项目源路径的文件夹结构中。 Flash构建器清楚地识别基类,因为它识别RootLayoutSprite。

当我尝试构建它时,我得到以下内容:

1006: A super expression can be used only inside class instance methods.    DoesThisEvenWork.as /DoesThisEvenWork/src   line 17 Flex Problem
1010: The override attribute may be used only on class property definitions.    DoesThisEvenWork.as /DoesThisEvenWork/src   line 15 Flex Problem
1010: The override attribute may be used only on class property definitions.    DoesThisEvenWork.as /DoesThisEvenWork/src   line 21 Flex Problem
1020: Method marked override must override another method.  DoesThisEvenWork.as /DoesThisEvenWork/src   line 15 Flex Problem
1020: Method marked override must override another method.  DoesThisEvenWork.as /DoesThisEvenWork/src   line 21 Flex Problem

因此,Flash Builder不会让我覆盖这些方法。如果我删除'override'属性,Flash Builder会抱怨这些方法是在基类中定义的。捂脸。

请注意,这个简单的代码在Flash IDE中运行良好。

老实说,我不知道发生了什么。我没有愚弄Flash Builder配置。我已经避免使用Flash Builder多年了,因为我没有编写Flex项目......而且在我的空闲时间我编写C ++所以我对Flash Builder eclipse工具链一无所知。

我的假设是Flash IDE的编译器不如Flash Builder那么严格,因此,我一直做错了很长时间,我不知道它是错的。 < / p>

帮助?!

1 个答案:

答案 0 :(得分:2)

代码也不应该在Flash IDE中编译 - 它包含语法错误。 您在构造函数后关闭了类声明。只需将那个花括号向下移动,一切都应该可以正常工作。

package
{
    import zakariya.layout.RootLayoutSprite;

    public class DoesThisEvenWork extends RootLayoutSprite
    {
        public function DoesThisEvenWork()
        {
            ...
        }
    } // <= your class ends here

    // everything below is outside of the class!

    override public function onLayoutUpdated():void
    {
     ...}
}