2012-03-24 9 views
0

2つのクラスがあります。戻り値の型を変更するFlexオーバーライド

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

答えて

3

あなたが探している機能はcovariant return typeですが、AS3では使用できません。

+0

英語で説明するのはちょっと複雑ですが、試してみます。私はインフラストラクチャとゲームを手に入れました。私はインフラとゲームの両方で使用しているシングルトーンを持っています(私があなたに尋ねるとどうなるか説明します)。そして、私のメインシングルトーンクラスシングルトーン)。だから、私のAPIクラスはインフラのシングルトーンから超過する必要があり、それからオーバーライドされ、ゲームのシングルトーンから超過する必要があり、ゲームからアクセスするたびにキャストしたくありません。だから、これは今のところas3の解決策ではありません... –

1

メソッドをオーバーライドするときにメソッドシグネチャを変更することはできません。どちらのメソッドでも、戻り値の型をObjectなどの固有性の低い型にすることができますが、これによって型チェックの一部が省略されます。

1

オーバーライドの戻り値の型や引数を変更することはできません。署名は常に一致する必要があります。

しかし、あなたの現在の継承モデルを使用すると、AのためにBを返すことができるようになる:

class B extends A { 

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

、あなたは、呼び出し元のメソッドにBに戻り値をキャストすることができます。

これを行う別の方法は、戻り値の型を*に設定することですが、自分で型チェックを行う必要があります。