Flash AS3中的类设计和继承问题

时间:2008-11-07 05:44:14

标签: actionscript-3 inheritance

我对如何设计一些类有疑问。我有三节课。一个超类和两个子类。

一个子类(AnimatedCharacter)由flash制作,用于在屏幕上显示对象。另一个(CharacterPhysics)由我自己来扩展超类。

问题是我使用的对象是AnimatedCharacter类型,所以我不能把它放在CharacterPhysics类型的变量中。

我尝试的是某种Decorator模式,通过给CharacterPhysics类型的对象提供对另一个对象的引用。但是现在我必须覆盖超类的所有方法并将方法调用传递给引用。不是一个理想的情况。

有人知道如何解决这类问题吗?

alt text http://www.freeimagehosting.net/uploads/7a95f8352c.png

3 个答案:

答案 0 :(得分:1)

我不太明白你描述的这个类结构的目的(类名混淆了我),但总的来说,有些事情可以帮助你:

几乎总是最好的解决方案是尝试重新思考您的类模型,方法是评估您是否应该以另一种方式分解类的职责,以便您可以利用继承和多态更好的方式。

  

“问题是我使用的对象,   是AnimatedCharacter类型,所以我   不能只把它放在一个变量中   输入CharacterPhysics。“

如果要将AnimatedCharacter放入类型CharacterPhysics的变量中,前者应该扩展后者,或者您应该为两者都有一个公共接口(或超类),然后键入变量因此。如果这是不可能的,我的意见是你应该尝试重新思考和重构你的整个类结构,假设你有一个坚实的“面向对象”的理由,想要首先做这个;)。

如果上述情况不可行,您可以在上下文中评估其他一些技巧:

  • 使用mixins可以作为“穷人的多重继承”。 Derek Wischusen有一些关于如何在{3}}的AS3中实现它们的例子。
  • 使用flexonrails.net实现装饰器模式的“种类”。这种方法的问题在于您将大量错误检查从编译时推迟到运行时,但好处是您不必手动编写“装饰”对象的所有方法的“代理”实现,但只写一个(flash.utils.Proxy)而不是。

答案 1 :(得分:0)

您可以将子类解释为超类的实例,但不能解释副sersa。你有没有向后说明这一点?

如果是这样,你可以使用:

vas cp:CharacterPhysics;

...

var ac:AnimatedCharacter = cp As AnimatedCharacter

答案 2 :(得分:0)

在我的脑海中,似乎那些2应该是你的主类实现的接口