AS3 переопределить публичную функцию, оба они называются? - PullRequest
1 голос
/ 16 июня 2011

Я немного смущен этой концепцией.

Если бы я переопределил открытую функцию в базовом классе, я бы подумал, что эта функция переопределения вызывается, а оригинал игнорируется? хотя, похоже, это не так ...

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 ()» Что я могу делать неправильно?

1 Ответ

3 голосов
/ 16 июня 2011

Вы правы, это не должно вызывать функцию базового класса.Вы уверены, что в вашем переопределении нет вызова на

super.initLanguage()

?

Большинство IDE автоматически добавляют этот вызов в тело функции, если они создают переопределение для вас.

EDIT

Из ваших изменений я вижу, что вы перебираете два объектатипы Start и TakePhoto.Я предполагаю, что TakePhoto также получен из AbstractScreen, и след может быть от этого.

Также я предлагаю использовать абстрактный базовый класс в вашей итерации.

for each (var screen:AbstractScreen in _screens)
{
    screen.updateLanguage();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...