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

时间:2011-01-17 13:20:10

标签: 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);

    }
}

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

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

2 个答案:

答案 0 :(得分:5)

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

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

然后你想要实现的就像调用

一样简单
super.superKeyDownHandler(event);

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

<强>更新

可能更干净的东西会涉及覆盖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();
    }
}

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

答案 1 :(得分:-1)

我从你的问题中收集的是,你想要使用超类的超类给出的功能,而不是超类本身。 我是对的吗?