Можно ли получить доступ к суперклассу суперкласса в flex / as3? - PullRequest
2 голосов
/ 17 января 2011

Я пытаюсь переопределить метод подкласса, но я думаю, что мне нужен доступ к суперклассу, который находится выше в иерархии.Поэтому я хотел бы сделать что-то вроде super.super.methodName ();

К вашему сведению, реальная проблема, которую я пытаюсь решить, должна быть объяснена моим кодом ниже:

public class A extends UIComponent{
    override protected function keyDownHandler(event:KeyboardEvent):void{
        super.keyDownHandler(event);

        if(event.keyCode==46)
            remove();

    }
}

public class B extends A{
    override protected function keyDownHandler(event:KeyboardEvent):void{

        if(event.keyCode==46 && removeable==true)
            remove();
                    else
                super.super.keyDownHandler(event);

    }
}

Если я использую метод KeyDownHandler класса A, вы увидите, что remove () вызывается независимо.Тем не менее, документы утверждают, что мне нужно вызывать UIComponent.keyDownHandler всякий раз, когда я подкласс UIComponent.Конечно, это работает для первого подкласса, но не для подклассов этого подкласса.

Я понимаю, что мог бы поместить всю функциональность в A с чем-то вроде if (это B) {...}, но это, кажется,мне быть взломом.

Ответы [ 2 ]

5 голосов
/ 17 января 2011

Вы можете добавить другой метод в класс A, давайте назовем его superKeyDownHandler, единственной целью которого будет вызов какого-либо метода из суперкласса.

protected function superKeyDownHandler(event:KeyboardEvent):void{
    super.keyDownHandler(event);
}

И тогда то, чего вы хотите достичь, будет так же просто, как вызов

super.superKeyDownHandler(event);

Это всего лишь обходной путь, но не чистое решение, поэтому используйте его на свой страх и риск:)

ОБНОВЛЕНИЕ:

Что-то, может быть, чище, будет включать в себя переопределение содержимого keyDownHandler класса A. Поэтому в классе A вы должны иметь:

public class A{
    override protected function keyDownHandler(event:KeyboardEvent):void{
        super.keyDownHandler(event);
        overridableContent();
    }

    protected function overridableContent(){
        //do class A specific things here
        if (event.keyCode==46)
            remove();
    }
}

public class B extends A{
    override protected function overridableContent(){
        //do class B specific things here
        if (event.keyCode==46 && removeable==true)
            remove();
    }
}

Вызов чего-то вроде new B().keyDownHandler(event) теперь вызовет вызов keyDownHandler, как это определено в классе A с содержимымвзято из класса B.

0 голосов
/ 17 января 2011

Что я понял из вашего вопроса, так это то, что вы хотите использовать функциональность, предоставляемую суперклассом суперкласса, а не самим суперклассом. Я прав, Камилла?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...