Je substitue une fonction protégée dans une sous-classe.Actionscript Duck-Typing
Disons que j'ai deux classes, Apple et Fruit. J'ai toutes les variables en place, c'est juste une version simplifiée.
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
L'exemple est trivial. Le problème est que le type de la fonction getRandom dépend de son propre type. L'un retourne une pomme, l'autre rend un fruit. Bien sûr, je reçois des erreurs à propos de l'override et de la coercition.
J'ai essayé de renvoyer un Fruit au lieu d'un Apple, mais alors l'objet n'est pas une pomme, donc il n'a pas de propriétés spécifiques à Apple. Le problème est dans ducktyping. Il y a une troisième classe que je ne peux pas changer, qui exécute la fonction getRandom() sur chaque objet, et j'ai besoin que les pommes soient légèrement différentes.
Comment puis-je remplacer la fonction getRandom dans Apple, afin qu'elle renvoie des pommes, plutôt que des fruits?
Désolé, juste changé le premier message. Supposons que le FruitBasket soit une classe qui ne peut pas être modifiée. Cela fait partie d'une bibliothèque, et plutôt que de la changer, j'en ai fait une sous-classe: AppleBasket. Il fait des pommes, plutôt que des fruits, évidemment. Maintenant, ce FruitBasket est inclus dans une autre classe que je ne peux pas changer, etc etc – flappy
oh je vois ce qui se passe. Cela change ma réponse. – jhocking
Il existe une autre classe que je ne peux pas éditer, disons HiddenClass, qui fonctionne avec Fruit. Puis une autre classe qui utilise le HiddenClass etc J'ai actuellement résolu le problème en créant de nouvelles classes pour chaque classe dans la hiérarchie, de sorte qu'ils peuvent inclure plus de choses spécifiées. Ce n'est pas ma solution préférée, mais cela fonctionne. – flappy