Actionscript鸭子类型

Actionscript鸭子类型,actionscript,duck-typing,Actionscript,Duck Typing,我正在重写子类中的受保护函数 假设我有两门课,苹果课和水果课。 我有所有的变量,这只是一个简化版本 class FruitBasket protected function getRandom():Fruit { // return random piece of fruit } class AppleBasket extends FruitBasket protected override function getRandom():Apple

我正在重写子类中的受保护函数

假设我有两门课,苹果课和水果课。 我有所有的变量,这只是一个简化版本

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函数的类型取决于它自己的类型。一个还苹果,另一个还水果。 当然,我会在覆盖和强制方面出错

我尝试返回一个水果而不是苹果,但是对象不是苹果,因此它没有特定于苹果的属性。 问题在于打字。还有第三个类我不能更改,它在每个对象上执行getRandom()函数,我需要苹果稍微有所不同

如何重写Apple中的getRandom函数,使其返回苹果而不是水果?

这是一个问题。我不会简单地重写这个函数;相反,我会将函数重命名为更具体的函数。因此,在AppleBasket中将其重命名为getRandomApple()。你的语义学有点混乱,所以我会把事情分开,弄清楚


很遗憾,你不能在水果篮中更改函数名,因为我会将其更改为getRandomFruit(),以使语义更清晰。

在AS3中,与duck类型相同的是“*”或“Object”类型。

抱歉,刚刚更改了第一篇文章。让我们假设果篮是一个不能改变的类。它是库的一部分,我没有修改它,而是创建了它的一个子类:AppleBasket。很明显,它制造苹果,而不是水果。现在这个果篮被包括在另一个类中,我不能改变,等等。哦,我知道发生了什么。这改变了我的答案。还有一个类我不能编辑,比如说HiddenClass,它与水果一起工作。然后是另一个使用HiddenClass等的类。我目前通过为层次结构中的每个类创建新类来修复这个问题,这样它们就可以包含更多指定的内容。这不是我最喜欢的解决方案,但它很有效。