【问题标题】:Actionscript Duck-typingActionscript 鸭子打字
【发布时间】:2011-11-25 12:19:25
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: actionscript duck-typing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 抱歉,刚刚更改了第一个帖子。假设 FruitBasket 是一个无法更改的类。它是库的一部分,我没有更改它,而是创建了它的一个子类:AppleBasket。显然,它制造的是苹果,而不是水果。现在这个 FruitBasket 包含在另一个我无法更改的类中,等等。
      • 哦,我明白了。这改变了我的答案。
      • 还有一个我无法编辑的类,比如 HiddenClass,它适用于 Fruit。然后是另一个使用 HiddenClass 等的类。我目前通过为层次结构中的每个类创建新类来解决问题,以便它们可以包含更多指定的东西。这不是我最喜欢的解决方案,但它确实有效。
      猜你喜欢
      • 1970-01-01
      • 2012-10-26
      • 2011-03-23
      • 2011-05-11
      • 2020-02-13
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多