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

0

我不确定是否每个人都在使用字典。你可以试试

for(var key:String in dict)
{
  i++;
}
于 2013-04-13T15:09:56.623 回答