2012-03-24 88 views
0

我有兩個班。彈跳覆蓋改變返回類型

class A{ 
    protected var _value:A; 

    public function get value():A{ 
     return _value; 
    } 
} 

class B extends A{ 

    override public function get value():B{ 
     return super.value as B; 
    } 
} 

我的重寫中出現錯誤,我不知道如何解決。我想覆蓋一個方法並改變它的返回值。

+0

這是不可能的。你能解釋一下你爲什麼要這樣做嗎?可能會有更好的方法。 – sch 2012-03-24 17:33:26

回答

3

您正在查找的功能稱爲covariant return type,但不可用的功能是AS3。

+0

這是一個有點複雜的解釋(英語),但我嘗試。我得到了我的基礎結構和遊戲,我得到了單音,我在Infra和遊戲中都會用到(我會解釋你是如何問的),並且我還有其他單身人士,都是我主要單音班的成員(應用程序單音)。因此,我的api課程需要從單一的基調中過度,然後從遊戲單音調中超越和超過,並且我不希望每次從遊戲中訪問它。所以這是關於它,現在沒有as3的解決方案... – 2012-03-24 21:01:24

1

當您重寫方法時,不能更改方法簽名。對於這兩種方法,您可以選擇將返回類型設置爲較不特定的類型(如對象) - 但這會消除一些類型檢查。

1

您無法更改覆蓋的返回類型或參數 - 簽名必須始終匹配。

,但是你當前的繼承模型將允許您爲一個A返回B:

class B extends A { 

    override public function get value():A{ 
     return new B(); 
    } 
} 

,你可以將返回值在調用方法B點。

這樣做的另一種方法是將返回類型設置爲*,但您必須照顧自己的類型檢查。