AS3:两个具有相同名称但来自两个接口的不兼容签名的函数

Ale*_*lex 3 actionscript actionscript-3

我有两个接口声明具有相同名称但不兼容的签名的函数:

interface IDog 
{
    function bark() : void;
}

interface IAdvancedDog
{
    function bark(volume : Number) : void;
}
Run Code Online (Sandbox Code Playgroud)

我需要在同一个类中实现它们,如下所示:

class AlphaDog implements IDog, IAdvancedDog
{
     public function bark() : void
     {
     }

     public function bark(volume : Number) : void
     {
     }
}
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用.在这种情况下,有没有办法消除bark()函数的歧义?例如,C#允许显式接口标记:

   class AlphaDog : IDog, IAdvancedDog
   {
       // ...
       void IDog.bark() { } 
   }
Run Code Online (Sandbox Code Playgroud)

虽然由于函数重载规则,C#中不需要这样做.AS3中没有超载,有没有其他方法可以解决这个问题?

UPDATE.

1)在课堂定义中缺少'公共'限定符是一个错字.我修好了它.

2)我错过了一个额外的要求,即不能修改接口(为了这个问题的目的).在实际项目中,它们被定义在两个不同的库中,这些库是大型项目的一部分.多个类实现两个接口(单独).因此,接口的任何更改都需要对所有这些类进行级联更新,重新编译,测试等.因此,我想首先找出是否存在没有这种侵入式修改的解决方案.它似乎没有.

The*_*Man 5

ActionScript 3不支持这样的函数重载.此外,您没有定义函数是否公开,您将收到编译错误.

在您的情况下,您可以做的是添加默认的NaN并且只有一个接口.

package{
  public class AlphaDog implements IDog
    {
         public function bark(volume : Number = NaN) : void
         {
         }
    }
}


package{
    interface IDog
    {
        function bark(volume : Number = NaN) : void;
    }
}
Run Code Online (Sandbox Code Playgroud)