Я разрабатываю фреймворк, и в процессе работы я столкнулся с интересной, но, скорее всего, основной проблемой. У меня есть базовый класс с именем CoreEngine и два других класса, расширяющих его: CoreEngine1 и CoreEngine2 . Я создал интерфейс, который будет реализован каждым из этих классов для повышения гибкости моего проекта. Однако у меня есть проблема ... Определение моих методов в интерфейсе не соответствует определению в каждом унаследованном классе! Каждый класс должен реализовывать следующий метод:
функция get avatar (): AvatarBase;
Проблема в том, что CoreEngine1 и CoreEngine2 ожидают другой тип аватара:
CoreEngine1
функция get avatar (): AvatarScaling
CoreEngine2
функция get avatar (): AvatarPlatform
Как видите, тип возврата для avatar в CoreEngine1 и CoreEngine2 НЕ соответствует типу, указанному в интерфейсе. Я надеялся, что поскольку AvatarScaling и AvatarPlatform наследуют AvatarBase , у меня не возникнет проблем при компиляции. Однако, это не так. Согласно документации Adobe, типы ДОЛЖНЫ соответствовать интерфейсу. Я пытаюсь следовать одной из основных концепций объектно-ориентированного программирования, чтобы расширить гибкость моей среды: «Программируйте на интерфейс, а не на реализацию». Первое, что приходит мне в голову, это то, что тип возвращаемого значения метода доступа должен иметь тип интерфейса (возможно, я просто ответил на свой вопрос).
Я уверен, что это обычная проблема, с которой другие сталкивались раньше. С архитектурной точки зрения, что вы думаете, это лучший способ решить эту проблему? Заранее спасибо!
С уважением,
Будет