0

これは明らかなはずだと思いますが、何らかの理由で私には意味がありません。

public class Foo extends Sprite
{
    protected var dict:Dictionary = new Dictionary();

    protected function subclassBehavior():void
    {
        //defined in subclass
    }
    public function accessDictionary():void
    {      
        subclassBehavior();

        var i:int = 0;
        for each(var value:Object in dict)  
        {
            i++;
        }
        trace(i);
    }
}

十分に単純です。

次に、サブクラス:

public class Bar extends Foo
{
    override protected function subclassBehavior():void
    {
        dict["a"] = "b";
    }
}

そして、もしそうなら:

var instance:Foo = new Bar();
instance.accessDictionary();

トレースが 1 を返すことを期待します。代わりに 0 を返します。Foo のメソッドに関する限り、dict のエントリは存在しません。Bar に dict を参照する別の関数がある場合、エントリが表示されます。Bar でディクショナリをインスタンス化して Foo に渡したり、Bar での呼び出しを変更して Foo でディクショナリを更新するメソッドを呼び出したりしようとしましたが、どれも私の状況を変えないようです。

サブクラスで他のオーバーライドされた動作を反映させたい基本クラスのすべての機能をオーバーライドする必要がありますか?

4

1 に答える 1