请帮助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.
预先感谢任何帮助,乔治
答案 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();
这一切都很有效。谢谢你们的帮助:)