2011-03-24 5 views
3

は... カスタムネームスペースにあるメソッドをサブクラス化してオーバーライドする方法はありますか?

package com.foo.bar 
{ 
    import com.foo.my_name_space 
    public class bar 
    { 
    private var _vabc:String 
    private var _v123:String 

    protected function set123(val:String):void{ 
     _v123 = val; 
    } 

    my_name_space function setABC(val:String):void{ 
     _vabc = val; 
    } 

    } 
} 

は、今、私が拡張し、サブクラスでこのメソッドをオーバーライドしたい...私は、公共の保護または内部以外の名前空間で定義されたメソッドを持つクラスを持っていると言う

package com.foo 
{ 
    import com.foo.bar.bar 
    import com.foo.my_name_space 

    public class foo extends bar 
    { 
     override protected function set123(val:String):void{ 
     super.set123(val); 
     } 

     .... ????? ... 

    } 
} 

protected、publicなどのメソッドをオーバーライドするのは簡単ですが、名前空間* my_name_space *に定義されたsetABCメソッドをオーバーライドする方法がありますか?

私はFlashBuilderプリコンパイラのチェックに合格したようですが、動作しない次の構文を試しました。

​​

私は多くの他の構文の組み合わせを試しましたが、ほとんどはプリコンパイルのチェックに合格しませんでした。 (いくつかの型の名前空間エラーを持つ多くの)私はこれは不可能だと思っていますが、誰かがアイデアを持っているかもしれないのだろうか?

+0

ネームスペースをどのように宣言していますか?私たちはそのコードをご覧になれますか?ありがとう。 –

+0

これは公開名前空間です –

答えて

6

ジェームズの答えが正しいと動作するはずです。 use namespaceディレクティブを適切に追加できませんでした。この例は期待どおりに動作します。

package { 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import test.Base; 
    import test.Child; 
    import test.my_namespace; 

    public class Main extends Sprite { 

     use namespace my_namespace; 

     public function Main():void { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
      // entry point 

      var base:Base = new Base(); 
      base.test(); 

      var child:Child = new Child(); 
      child.test(); 
     } 

    } 

} 

package test { 
    import test.my_namespace; 
    use namespace my_namespace; 

    public class Base { 

     my_namespace function test():void { 
      trace("Base"); 
     } 

    } 

} 

package test { 
    import test.Base; 
    import test.my_namespace; 
    use namespace my_namespace; 

    public class Child extends Base { 

     public function Child() { 

     } 

     override my_namespace function test():void { 
      trace("Child"); 
      super.my_namespace::test(); 
     } 
    } 

} 

package test { 
    public namespace my_namespece; 
} 
+0

合意。私はこれも考えて、コメントとして投稿しました。完全な実装を提供していただきありがとうございます。 –

+2

また、私はジャスティンがあなたを助けようとしている人たちととても苦いこと、そして人々の回答をマークすることについて(丁寧に)丁寧に注意したいと言いました。私たちはすべてここに学びます。 –

+0

ありがとうございましたuse namespace指令が問題でした –

3

これは

override my_name_space function setABC(val:String):void 
{ 
} 
+0

実際には正しいかもしれません。私が行った研究から、カスタム名前空間からメソッドをオーバーライドする適切な方法です。あなたのクラスでこのオーバーライドの前のどこかで "using namepspace my_namespace"を呼び出していることを確認してください。これがうまくいかない場合は、あなたの名前空間をプライベート名前空間として定義している可能性があります。 –

+0

+1。あなたの答えは正しい。 –

+0

申し訳ありませんが、これを不完全な回答としてマークすることはできません。この構文は、 "use namespace"ディレクティブを使用することで動作します。 –

関連する問題