我对这个概念感到有些困惑。
如果我覆盖基类中的公共函数,我会认为调用此覆盖函数并忽略原始函数?虽然情况似乎并非如此......
public class AbstractScreen extends Sprite
{
public function AbstractScreen()
{
}
public function updateLanguage():void
{
trace("WARNING: need to override public function updateLanguage()");
}
}
public class Start extends AbstractScreen
{
override public function updateLanguage():void
{
title.text = _model.language.start
title.setTextFormat(titleFormat);
}
}
public class ViewManager extends Sprite
{
private var _model:Model;
private var _screens:Array;
public function ViewManager(model:Model)
{
_model = model;
_model.addEventListener(AppEvent.INIT_VIEW, initViews);
_model.addEventListener(AppEvent.UPDATE_VIEW, updateView);
_model.addEventListener(AppEvent.CHANGED_LANGUAGE, changeLanguage);
}
private function initViews(e:AppEvent):void
{
trace("View Manager: initViews");
_screens = new Array(new Start(_model), new TakePhoto(_model));
dispatchEvent(new ViewEvent(ViewEvent.VIEW_READY));
}
private function changeLanguage(e:AppEvent):void
{
for each (var screen:AbstractScreen in _screens)
{
screen.updateLanguage();
}
}
}
如果我的模型调度了一个CHANGED_LANGUAGE事件,那么视图中的文本会更新,但我也会得到一条“警告:需要覆盖公共函数updateLanguage()”我可能做错了什么?
答案 0 :(得分:3)
你是对的,这不应该调用基类函数。你确定没有电话
super.initLanguage()
在你的覆盖范围内?
大多数IDE会自动在函数体中添加此调用,如果它们为您创建覆盖。
在您的编辑中,我看到您正在迭代两个Start
和TakePhoto
类型的对象。我假设TakePhoto
也来自AbstractScreen
,并且跟踪可能来自这个。
我还建议在迭代中使用抽象基类。
for each (var screen:AbstractScreen in _screens)
{
screen.updateLanguage();
}