例如,如果我有一个扩展雪碧并实现了一个对象Mungable我想这样做: -如何用类型x和接口y声明变量?
var foo:Sprite <mungable>
,这样我可以这样做:
addChild(foo);
foo.munge();
这在Actionscript 3中可能吗?
例如,如果我有一个扩展雪碧并实现了一个对象Mungable我想这样做: -如何用类型x和接口y声明变量?
var foo:Sprite <mungable>
,这样我可以这样做:
addChild(foo);
foo.munge();
这在Actionscript 3中可能吗?
不能直接使用。正如其他人所建议的那样,您可以创建一个类型,例如MungableSprite
,该类型可以扩展Sprite
并实现Mungable
,然后引用该类型。但是,您只能将其用于对象,其类型是MungableSprite
的子类型。
但是,您不能简单地传达类型关系“一个对象,它是Mungeable和雪碧”。
当然。你可以简单地将你的变量转换为接口。
public class MySprite extends Sprite implements IMungable {
public function munge() : void {
// this is the interface function to implement
}
}
var foo:Sprite = new MySprite() as Sprite;
IMungable(foo).munge();
您也可以转换为MySprite
调用munge()
。
当然是了。
在AS3中,您不能拥有多重继承,但接口非常普遍。
对于你的界面,创建一个名为IMungable.as
package
{
public interface IMungable
{
function munge():void;
}
}
对于您的自定义精灵ActionScript文件,创建一个名为ActionScript文件MyFoo.as
package
{
import flash.display.Sprite;
public class MyFoo extends Sprite implements IMungable
{
public function MyFoo()
{
super();
}
public function munge():void{
trace("munging");
}
}
}
然后其他地方,只需创建一个新实例并调用该方法即可。
var foo:Sprite = new MyFoo();
addChild(foo);
IMungable(foo).munge();
干杯
谢谢。屁股动作中的痛苦是 – hooleyhoop 2011-05-24 15:51:00
@ fakeAccount22:那么你应该考虑使用haXe。有[计划](http://code.google.com/p/haxe/issues/detail?id=271)支持这个(我认为在邮件列表中碰到问题会有所帮助:))。然而,这里的实际问题不是as3,而是Flash Player API。如果有'ISprite',你可以定义一个任意类可以随意实现的'IMungableSprite'。 – back2dos 2011-05-24 16:08:21
在Java中,例如,您可以将变量声明为两种类型,因此不需要进行强制转换 - 这几乎就是接口的要点。这就是我想知道如何去做的。谢谢。 – hooleyhoop 2011-05-24 15:46:51
在Actionscript中不可行,您必须投射。你可能有'var foo:* = new MySprite();'为一个无类型变量。 – DanielB 2011-05-24 15:51:36