Подскажите как правильно спроектировать классы.
Задача:
Пусть пишем гонки. Есть несколько авто, которые гоняются. Одно авто управляется юзером, остальные AI.
Думаю схема должна быть такая:
Класс
Car - тут различная инфа об авто (цвет, форма, скорость и др характеристики)
Класс
UserControl - тут реакция на нажатие кнопок, может мыши, ну т.е. ручное управление.
Класс
AIControl - тут уже ком сам управляет авто.
Тут все более менее понятно.
Теперь перейдем к классу
Car
Пускай там есть следующие поля:
-
coords - координаты авто
-
speed - скорость
..... еще много чего ........
-
control - а вот тут должен быть объект либо класса
UserControl либо
AIControl, в зависимости от того кто должен управлять авто.
какого типа должно быть поле control?
Планируется что классы AIControlи UserControl имеют функцию скажем loop, которая и "решает" что делать с авто.
Тут как мне кажется напрашивается использование интерфейсов.
Что то типа этого (ICarControl):

Код AS3:
package Classes
{
public interface ICarControl
{
function loop(bezier: MyBezier, time: Number, speed: Number, dx: Number): void;
}
}
А классы UserControl и AIControl уже реализуют этот метод.
Так вот, если в классе Car я объявляю так:

Код AS3:
private var control: ICarControl;
То при попытке положить туда объект класса AIControl или UserControl компилятор ругается, что не может преобразовать AIControl в ICarControl.
Как быть?