我正在尝试覆盖子类的方法,但我认为我需要访问层次结构中较高级别的超类。所以我想做一些像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){...} 但在我看来,这似乎是一个黑客。
答案 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)
我从你的问题中收集的是,你想要使用超类的超类给出的功能,而不是超类本身。 我是对的吗?