У меня проблемы с дизайном некоторых классов. У меня три класса. Один суперкласс и два подкласса.
Один подкласс (AnimatedCharacter) создается с помощью flash и используется для отображения объекта на экране. Другой (CharacterPhysics) я создал для расширения суперкласса.
Проблема в том, что я использую объект типа AnimatedCharacter, поэтому я не могу просто поместить его в переменную типа CharacterPhysics.
Я пробовал использовать своего рода шаблон декоратора, дав объекту типа CharacterPhysics ссылку на другой объект. Но теперь мне нужно переопределить все методы суперкласса и передать вызовы методов ссылке. Не идеальная ситуация.
Кто-нибудь знает, как решить такую проблему?
альтернативный текст http://www.freeimagehosting.net/uploads/7a95f8352c.png





Я не совсем понимаю цель этой структуры классов, которую вы описываете (названия классов меня сбивают с толку), но в целом на ум приходит несколько вещей, которые могут вам помочь:
Почти всегда лучшее решение - попытаться переосмыслить модель класса, оценив, следует ли, например, разбить обязанности классов альтернативным способом, чтобы можно было лучше использовать наследование и полиморфизм.
"The problem is that the object I use, is of the type AnimatedCharacter, so I can't just put it in a variable of type CharacterPhysics."
Если вы хотите поместить AnimatedCharacter в переменную типа CharacterPhysics, первое должно расширять второе, или у вас должен быть общий интерфейс (или суперкласс) для обоих, а затем ввести переменную как таковую. Если это невозможно, я считаю, что вам, вероятно, следует попытаться переосмыслить и реорганизовать всю структуру вашего класса, предполагая, что у вас есть веская «объектно-ориентированная» причина, по которой вы хотите сделать это в первую очередь;).
Если это невозможно, есть еще несколько приемов, которые вы можете оценить в своем контексте:
callProperty()).Вы можете интерпретировать подкласс как экземпляр суперкласса, но не наоборот. Вы заявили это задом наперед?
Если да, вы можете использовать:
vas cp: CharacterPhysics;
...
var ac: AnimatedCharacter = cp As AnimatedCharacter
Мне кажется, что эти 2 интерфейса должны быть интерфейсами, которые реализует ваш основной класс.
Имена AnimatedCharacter и AnimatedCharacterClass слишком похожи - это очень сбивает с толку.