У меня есть два интерфейса, которые объявляют функции с тем же именем, но несовместимыми сигнатурами:
interface IDog
{
function bark() : void;
}
interface IAdvancedDog
{
function bark(volume : Number) : void;
}
Мне нужно реализовать оба в одном классе, что-то вроде следующего:
class AlphaDog implements IDog, IAdvancedDog
{
public function bark() : void
{
}
public function bark(volume : Number) : void
{
}
}
Это, конечно, не работает. Есть ли способ устранить неоднозначность функций bark () в этом случае? C #, например, допускает явный маркер интерфейса:
class AlphaDog : IDog, IAdvancedDog
{
// ...
void IDog.bark() { }
}
Хотя это не требуется в C # из-за правил перегрузки функций. В AS3 нет перегрузки, есть ли другой способ решить эту проблему?
UPDATE.
1) Отсутствие общедоступных классификаторов в определении класса было опечаткой. Я починил это.
2) Я пропустил дополнительное требование, чтобы интерфейсы НЕ могли быть изменены (для целей этого вопроса). В реальном проекте они определены в двух разных библиотеках, которые являются частью большого проекта. Несколько классов реализуют оба интерфейса (отдельно). Таким образом, любые изменения интерфейсов потребуют каскадного обновления всех этих классов, перекомпиляции, тестирования и т. Д. Итак, я сначала хотел выяснить, было ли решение без таких навязчивых модификаций. Кажется, что нет.