AS3类继承问题

时间:2009-12-11 16:42:32

标签: flash actionscript-3 actionscript

请帮助Stackoverflow!我在AS3中有一个继承自Interface类的MapInterface类。

public class Interface extends Sprite {
    public function Interface(){
        // do stuff
    }
}

然后

import com.georgecrabtree.Interface;

public class MapInterface extends Interface {
    public function MapInterface(){
        addMapButtons();
    }
    public function addMapButtons():void {
        trace("init");
    }
}

这一切都很好,当我从文档类创建一个新的MapInterface类时,它会追溯到init。但是当我试着这样称呼时:

var mapInterface:MapInterface = new MapInterface();
mapInterface.addMapButtons();
从主时间轴

我得到这个错误:

1061: Call to a possibly undefined method addMapButtons through a reference with static type com.georgecrabtree:Interface.

预先感谢任何帮助,乔治

2 个答案:

答案 0 :(得分:0)

如果我理解正确的问题,我认为您的第二个代码示例有错字。我想它实际上是:

var mapInterface:Interface = new MapInterface();
mapInterface.addMapButtons();

问题是您的变量属于Interface类型,它没有定义addMapButtons()方法。您可以通过将变量类型更改为MapInterface,或者通过向Interface添加addMapButtons()方法并覆盖MapInterface中的方法来解决问题。

答案 1 :(得分:0)

大家好,感谢您对此的帮助和关注。经过一夜好眠,我终于找到了问题所在。显然,我上面发布的代码是我实际拥有的一个淡化版本。

问题是我的文档类没有扩展Sprite,它扩展了一个名为Installation的类,它本身扩展了Sprite。这是因为我正在制作10个装置并且它们都有一堆共同点,它们都有屏幕保护程序,介绍视频等。它们都有一个接口,这就是我的问题所在,作为9个安装使用相同的界面,但需要一个(地图安装)有一些额外的GUI元素。

我的问题是我的安装基类看起来像这样(我显示了一个修剪版本):

public class Installation extends Sprite {

    protected var _interface:Interface;

    public function Installation(){
        //do stuff
    }
}

因此,当我的MapInstallation扩展此类时,它继承了_interface变量。所以当我创建_interface变量作为MapInterface类型..

_interface = new MapInterface();

..编译器识别出类型为Installation的新MapInterface,但是_interface变量仍然强类型为Interface,所以当我后来尝试在_interface上调用addMapButtons()函数时,尽管函数在那里,编译器还有其他想法。我的解决方案是使用铸造..

(_interface as MapInterface).addMapButtons();

这一切都很有效。谢谢你们的帮助:)