apache-flex - 是否可以在 flex/as3 中访问父类(super class)的父类(super class)?

标签 apache-flex actionscript-3

我正在尝试重写子类的方法,但我认为我需要访问层次结构中更高的父类(super class)。所以我想做一些类似 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){...} 但在我看来,这似乎是一种黑客行为。

最佳答案

您可以向类 A 添加另一个方法,我们将其称为 superKeyDownHandler,其唯一目的是调用父类(super class)中的某些方法。

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。

关于apache-flex - 是否可以在 flex/as3 中访问父类(super class)的父类(super class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713586/

相关文章:

android - 文本输入在 Flex Mobile 项目中显示 block 而不是阿拉伯文本

linux - Web 应用程序部署在 Windows 中有效但在 Linux 中失败?

apache-flex - 何时在 AS3 的 ByteArray 中使用 writeUTF() 和 writeUTFBytes()

apache-flex - 如何自动构建Flex组件库?

performance - 使用可见与从舞台添加/删除时的内存使用+性能

flash - 强制收集其他 Flash 应用程序的垃圾?

闪光切换按钮

apache-flex - Sprite 未接收键盘事件

flash - 从 as3 中的 POST 上传中获取 ProgressEvent

regex - 使用 RegEx 检查扩展名