Actionscript Duck-машинопись - PullRequest
       33

Actionscript Duck-машинопись

1 голос
/ 26 сентября 2011

Я переопределяю защищенную функцию в подклассе.

Допустим, у меня есть два класса, Apple и Fruit. У меня есть все переменные, это просто упрощенная версия.

class FruitBasket
   protected function getRandom():Fruit
    {
        // return random piece of fruit
    }

class AppleBasket extends FruitBasket
   protected override function getRandom():Apple
    {
        // return random apple
    }

class Fruit

class Apple extends Fruit

Пример тривиален. Проблема в том, что тип функции getRandom зависит от ее собственного типа. Один возвращает яблоко, другой возвращает фрукт. Конечно, я получаю ошибки об отмене и принуждении.

Я пытался вернуть фрукт вместо яблока, но тогда объект не является яблоком, поэтому у него нет специфических для Apple свойств. Проблема в утином наборе. Есть третий класс, который я не могу изменить, который выполняет функцию getRandom () для каждого объекта, и мне нужно, чтобы яблоки были чем-то немного другим.

Как я могу переопределить функцию getRandom в Apple, чтобы она возвращала яблоки, а не фрукты?

Ответы [ 2 ]

0 голосов
/ 05 марта 2013

Эквивалентом утки в AS3 будет тип "*" или "Объект".

0 голосов
/ 27 сентября 2011

Это проблема кругового эллипса . Я бы просто не переопределил функцию; скорее я бы переименовал функцию, чтобы она была более конкретной. Поэтому переименуйте его в getRandomApple () в AppleBasket. Твоя семантика становится немного мутной, поэтому я бы выделил и прояснил ситуацию.

Жаль, что вы не можете изменить имя функции в FruitBasket, потому что я бы изменил это на getRandomFruit (), чтобы сделать семантику более понятной.

...