Flash AS3类继承问题

Flash AS3类继承问题,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,请帮帮我!我在AS3中有一个从接口类继承的MapInterface类 public class Interface extends Sprite { public function Interface(){ // do stuff } } 然后 import com.georgecrabtree.Interface; public class MapInterface extends Interface { public function MapInt

请帮帮我!我在AS3中有一个从接口类继承的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");
    }
}
这一切都很好,当我从document类创建一个新的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.

乔治,提前感谢您的帮助。如果我正确理解了这个问题,我想您的第二个代码示例有输入错误。我想它实际上是:

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

问题在于变量的类型为
接口
,它没有定义
addMapButtons()
方法。您可以通过将变量类型更改为MapInterface,或通过向接口添加
addMapButtons()
方法并重写MapInterface中的方法来解决此问题。

大家好,感谢您在这方面的帮助和关注。睡了一夜之后,我终于解决了我的问题。显然,我上面发布的代码是我实际拥有的代码的一个淡化版本

问题是我的文档类不是在扩展Sprite,而是在扩展一个名为Installation的类,该类本身扩展Sprite。这是因为我正在进行10次安装,它们都有一些共同点,它们都有一个屏幕保护程序、简介视频等。它们都有一个界面,这就是我的问题所在,因为其中9次安装使用相同的界面,但其中一次(地图安装)需要一些额外的GUI元素

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

因此,当我的MapInstallation扩展这个类时,它继承了_接口变量。因此,当我将_接口变量创建为MapInterface类型时

_interface = new MapInterface();
..编译器将新的MapInterface识别为安装类型,但_interface变量仍然是强类型的interface,因此,当我后来尝试在_interface上调用addMapButtons()函数时,尽管该函数在那里,但编译器有其他想法。我的解决办法是使用铸造

(_interface as MapInterface).addMapButtons();

一切都很顺利。谢谢你们的帮助:)

谢谢你们的帮助Richard,但是如果MapInterface类扩展了Interface类,然后我创建了MapInterface变量作为MapInterface,它应该是MapInterface类型吗?如果我在addMapButtons()之前跟踪变量跟踪(mapInterface);函数调用它输出窗口显示它是MapInterface类型?!您的原始代码看起来应该可以编译给我。如果变量被类型化为超类,则子类属性不可用(除非将变量强制转换为子类类型)。仍在等待确认:)命名类接口似乎是一件非常危险的事情,接口(带有小写字母i)是一个保留字。
(_interface as MapInterface).addMapButtons();