サブクラスの保護された関数をオーバーライドしています。
AppleとFruitの2つのクラスがあるとしましょう。私はすべての変数を配置しています。これは単純化されたバージョンです。
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関数のタイプがそれ自体のタイプに依存することです。1つはリンゴを返し、もう1つは果物を返します。もちろん、オーバーライドと強制についてエラーが発生します。
Appleの代わりにFruitを返そうとしましたが、オブジェクトはAppleではないため、Apple固有のプロパティはありません。問題はダックタイピングにあります。変更できない3番目のクラスがあります。これは各オブジェクトでgetRandom()関数を実行し、Appleは少し異なるものである必要があります。
AppleのgetRandom関数をオーバーライドして、フルーツではなくアップルを返すようにするにはどうすればよいですか?