我对如何设计一些类有疑问。我有三节课。一个超类和两个子类。
一个子类(AnimatedCharacter)由flash制作,用于在屏幕上显示对象。另一个(CharacterPhysics)由我自己来扩展超类。
问题是我使用的对象是AnimatedCharacter类型,所以我不能把它放在CharacterPhysics类型的变量中。
我尝试的是某种Decorator模式,通过给CharacterPhysics类型的对象提供对另一个对象的引用。但是现在我必须覆盖超类的所有方法并将方法调用传递给引用。不是一个理想的情况。
有人知道如何解决这类问题吗?
alt text http://www.freeimagehosting.net/uploads/7a95f8352c.png
答案 0 :(得分:1)
我不太明白你描述的这个类结构的目的(类名混淆了我),但总的来说,有些事情可以帮助你:
几乎总是最好的解决方案是尝试重新思考您的类模型,方法是评估您是否应该以另一种方式分解类的职责,以便您可以利用继承和多态更好的方式。
“问题是我使用的对象, 是AnimatedCharacter类型,所以我 不能只把它放在一个变量中 输入CharacterPhysics。“
如果要将AnimatedCharacter
放入类型CharacterPhysics
的变量中,前者应该扩展后者,或者您应该为两者都有一个公共接口(或超类),然后键入变量因此。如果这是不可能的,我的意见是你应该尝试重新思考和重构你的整个类结构,假设你有一个坚实的“面向对象”的理由,想要首先做这个;)。
如果上述情况不可行,您可以在上下文中评估其他一些技巧:
答案 1 :(得分:0)
您可以将子类解释为超类的实例,但不能解释副sersa。你有没有向后说明这一点?
如果是这样,你可以使用:
vas cp:CharacterPhysics;
...
var ac:AnimatedCharacter = cp As AnimatedCharacter
答案 2 :(得分:0)
在我的脑海中,似乎那些2应该是你的主类实现的接口