是否可以在flex/as3中访问超类的超类?

cam*_*mil 2 apache-flex actionscript-3

我试图覆盖子类的方法,但我认为我需要访问层次结构中较高级别的超类.所以我想做一些像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);

    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用类A的KeyDownHandler方法,您将看到remove()被调用.但是,文档声明每当我子类化UIComponent时我都需要调用UIComponent.keyDownHandler.当然这适用于第一个子类,但不适用于子类的子类.

我意识到我可以将所有功能全部放入A中,例如if(这是B){...},但在我看来这似乎是一个黑客.

2DH*_*2DH 5

你可以在A类中添加另一个方法,让我们称它为superKeyDownHandler,它的唯一目的是从超类中调用一些方法.

protected function superKeyDownHandler(event:KeyboardEvent):void{
    super.keyDownHandler(event);
}
Run Code Online (Sandbox Code Playgroud)

然后你想要实现的就像打电话一样容易

super.superKeyDownHandler(event);
Run Code Online (Sandbox Code Playgroud)

这只是一种方法而不是实际的清洁解决方案,所以使用它需要您自担风险:)

更新:

可能更干净的东西会涉及覆盖A类的keyDownHandler内容.所以在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

调用类似new B().keyDownHandler(event)现在的东西会导致调用keyDownHandler,因为它在A类中定义,内容取自B类.