Переопределение Flex для изменения типа возвращаемого значения - PullRequest
0 голосов
/ 24 марта 2012

У меня два класса.

class A{
   protected var _value:A;

   public function get value():A{
      return _value;
   }
}

class B extends A{

   override public function get value():B{
      return super.value as B;
   }
}

Я получил ошибку в своем переопределении, и я не знаю, как обойти это. Я хочу переопределить метод и изменить его возвращаемое значение.

Ответы [ 3 ]

3 голосов
/ 24 марта 2012

Функция, которую вы ищете, называется ковариантный тип возврата , но недоступна для AS3.

1 голос
/ 24 марта 2012

Вы не можете изменить тип возвращаемого значения или аргументы переопределения - подписи всегда должны совпадать.

Но ваша текущая модель наследования позволит вам вернуть B для A:

class B extends A {

   override public function get value():A{
      return new B();
   }
}

, и вы можете привести возвращаемое значение к B в методе вызывающей стороны.

Другой способ сделать это - установить тип возвращаемого значения на *, но вам придется позаботиться о проверке типа самостоятельно.

1 голос
/ 24 марта 2012

Вы не можете изменить сигнатуру метода при переопределении метода.Вы можете сделать возвращаемый тип менее специфичным типом (например, Object) для обоих методов, но это устраняет некоторые проверки типов.

...