2011-03-24 62 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); 
     } 

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

    } 
} 

很容易覆蓋保護,公共等方法,但有沒有辦法來覆蓋名稱空間* my_name_space *中定義的setABC方法?

我試過下面的語法,它似乎通過FlashBuilder預編譯器檢查,但不起作用。

​​

我試過一些其他的語法組合,但大多數甚至不會通過預編譯檢查。 (很多有一些類型的命名空間錯誤)我有一種感覺,這是不可能的,但不知道是否有人可能有任何想法?

+0

您如何聲明您的名稱空間?我們可以看到那個代碼嗎?謝謝。 – 2011-03-24 20:13:56

+0

這是一個公共命名空間 – 2011-03-24 20:55:26

回答

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

同意。我也是這麼想的,把它作爲評論發佈。感謝您提供完整的實施。 – 2011-03-24 20:56:26

+2

此外,在所有這些我都想提醒(禮貌地)賈斯汀關於與試圖幫助你的人一起如此痛苦,還有關於標記人們的答案。我們都在這裏學習。 – 2011-03-24 20:57:52

+0

謝謝是使用命名空間指令是問題 – 2011-03-24 20:58:23

3

這應該工作

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

他可能確實是對的。根據我所做的研究,這是從自定義命名空間中覆蓋方法的正確方法。確保您在類中的重寫之前的某個地方調用「使用namepspace my_namespace」。如果這不適合你,那麼你可能已經將你的命名空間定義爲一個私有名稱空間。 – 2011-03-24 20:21:19

+0

+1。你的回答是對的。 – 2011-03-24 20:33:42

+0

抱歉不能標記爲答案,因爲它不完整。只要你使用「use namespace」指令,這個語法就可以工作。 – 2011-03-24 21:02:58

相關問題