我正在覆盖子类中的受保护函数。
假设我有两个课程,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,因此它没有Apple特有的属性。 问题在于变形。有一个我无法改变的第三个类,它在每个对象上执行getRandom()函数,我需要苹果稍微不同。
如何覆盖Apple中的getRandom函数,以便它返回苹果,而不是水果?
答案 0 :(得分:0)
这是circle-ellipse problem。我根本不会覆盖这个功能;相反,我会将该功能重命名为更具体。所以在AppleBasket中将它重命名为getRandomApple()。你的语义变得有些混乱,所以我会把事情分开并更清楚。
你不能在FruitBasket中更改函数名称太糟糕了,因为我会将其更改为getRandomFruit()以使语义更清晰。
答案 1 :(得分:0)
相当于在AS3中输入鸭子将是“*”或“对象”类型。