2011-01-17 6 views
2

私はサブクラスのメソッドをオーバーライドしようとしていますが、私は階層内の上位のスーパークラスにアクセスする必要があると思います。だから私はsuper.super.methodName()のような何かをしたいと思います。ちなみに、私が解決しようとしている実際の問題は、以下の私のコードによって説明されなければならないflex/as3のスーパークラスのスーパークラスにアクセスすることは可能ですか?

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メソッドを使用する場合は、あなたが(その削除が表示されます)が関係なく、呼ばれています。しかし、ドキュメントでは、UIComponentをサブクラス化するたびにUIComponent.keyDownHandlerを呼び出す必要があると述べています。もちろん、これは最初のサブクラスでは機能しますが、そのサブクラスのサブクラスでは機能しません。

私は {...}(これはBである)場合、私は のようなものを持つにすべての機能を置くことができることを実現するが、それはハックする私には思えます。

+0

から取られたコンテンツにクラス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を呼び出す原因となります私はこれが本当にすぐに混乱するかもしれないと思います。これが組み込みのFlex UIComponentメソッドの一部をオーバーライドする場合は、いくつかの利点がありますが、かなり正直なところ、スーパーチェーン "。このコードを他の人と共有しようとしている場合は、それぞれのケースに固有のメソッド名を使用することをお勧めします。それ以外の場合は、ちょっとした挑戦のように見えます:) – bigp

答えて

5

クラスAに別のメソッドを追加することができます。スーパークラスからメソッドを呼び出すことのみを目的とするsuperKeyDownHandlerと呼ぶことができます。

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

そして、何を達成したいことはこれは周りがいない実際のクリーンなソリューションだけの方法ですので、ご自身の責任でそれを使用

super.superKeyDownHandler(event); 

を呼び出すのと同じくらい簡単になります:)

UPDATE:多分クリーナー

何かがクラスAで非常にクラスAのkeyDownHandler内容を上書き伴うだろうあなたWOU ldは持っている:それは、これはあなたのスーパーのスーパークラスのメソッドにアクセスするための賢い方法だろうが、クラスB

+0

あなたのアップデートは、私が読めるようにしようとしているものに合っていると思います。乾杯! – cammil

-1

私があなたの質問から収集するのは、スーパークラス自体ではなく、スーパークラスのスーパークラスによって与えられた機能を使いたいということです。 私は正しいカミルですか?

+1

コメントを投稿するにはコメントを使用し、質問には答えてください。あなたの答えは答えではありません... – goliatone

関連する問題