Actionscript 3 重写函数中的对象状态更改未反映在基类函数中

Actionscript 3 重写函数中的对象状态更改未反映在基类函数中,actionscript-3,actionscript,Actionscript 3,Actionscript,我认为这应该是显而易见的,但出于某种原因,这对我来说没有意义 public class Foo extends Sprite { protected var dict:Dictionary = new Dictionary(); protected function subclassBehavior():void { //defined in subclass } public function accessDictionary():vo

我认为这应该是显而易见的,但出于某种原因,这对我来说没有意义

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中的条目都不存在。如果我在工具栏中有另一个函数查看dict,它将看到条目。我尝试在Bar中实例化字典并将其传递给Foo,将Bar中的调用更改为在Foo中调用更新字典的方法,等等,所有这些似乎都无法改变我的情况


我是否需要重写基类中的任何和所有功能,以反映子类中其他被重写的行为?

我不确定for each是否使用dictionary。 你可以试试

for(var key:String in dict)
{
  i++;
}

我测试了您的代码,它为我打印了1。当您在
subpassbehavior()
中设置断点并查看
dict
的值时,会发生什么情况?这是对实际代码的极端简化,但如果它可以工作,我可以查找问题的其他来源,谢谢。只是想确认这不是AS3中预期的奇怪多态性行为。这可能确实是编译器的问题,附近有一个问题指出,他的编译器针对这对类这样的构造抛出
重写未标记为重写的函数。也许将
override
添加到
subclassBehavior()
函数描述就可以了。对我来说确实如此,FlashDevelop 3.4.3是编译器。@JonBarone我已经测试了您的示例,跟踪返回我1。你确定你没有什么特别的配置吗。您使用的是哪个IDE和哪个flash版本?