1

我正在覆盖子类中的受保护函数。

假设我有两个课程,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 函数的类型取决于它自己的类型。一个返回一个苹果,另一个返回一个水果。当然,我会收到有关覆盖和强制的错误。

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

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

4

2 回答 2

0

这是一个圆椭圆问题。我根本不会覆盖该功能;相反,我会将函数重命名为更具体。所以将它重命名为 AppleBasket 中的 getRandomApple()。你的语义变得有点混乱,所以我会把事情分开和更清楚。

太糟糕了,您不能更改 FruitBasket 中的函数名称,因为我会将其更改为 getRandomFruit() 以使语义更清晰。

于 2011-09-26T20:01:59.307 回答
0

在 AS3 中相当于鸭子类型的是“*”或“Object”类型。

于 2013-03-05T09:16:28.513 回答