Я переопределяю защищенную функцию в подклассе.
Допустим, у меня есть два класса, 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, чтобы она возвращала яблоки, а не фрукты?