2017-04-24 10 views
1

2つの異なる戻り値の型を持つメソッドをオーバーロードする必要があり、Javaでは "オブジェクト"の戻り値の型を持つスーパークラスを持っていると意味があります この2つの異なるクラスのメソッド?differentsの戻り値の型でオーバーロードを実装する

class A{ 
    Object method() 
    { 
    ... 
    } 
} 

class B extends A{ 
    @Override 
    Integer method() 
    { 
    ... 
    } 
} 

class C extends A{ 
    @Override 
    Double method() 
    { 
    ... 
    } 
} 

これを行うには良い方法がありますか?または単に他のソリューションですか?

+0

オーバーロードしてメソッドに別の名前を付けないでください... ...? –

+0

@RobinTopper 1.5以降である必要はありません。 –

答えて

5

「オブジェクト」の戻り値の型を持つスーパークラスがある場合は、このメソッドを2つの異なるクラスでオーバーライドすると意味がありますか?

はい。だからCovariant return typesがJava 1.5から導入されました。

1.5より前のバージョンでは、オーバーライドメソッドの戻り値の型は異なりません。これは1.5でリラックスしています。サブクラスメソッドの戻り値の型は、スーパークラスのメソッドの戻り値の型R1と異なる場合がありますが、R2はR1のサブタイプでなければなりません。すなわち、サブクラスは、スーパークラスの戻り値の型のサブタイプであってもよい。

+1

* Blech *。しかし、私はそれを見ることができると思います... :-)私は確かに罰金の理由がなければそれをしません。 –

+1

@ T.J.Crowder Ha ha。私はあなたを感じることができます。 5分と運のための実例を考えようとしました。 –

+0

私の経験では、実際の使用は非常に一般的です。私の頭の上から、私はGuavaがそれを全部使っていることを知っています。 – shmosel

0

まあ、私はあなたがに行く理由をまず説得しなければならないと思います。私はそれがオーバーライドのための最良のユースケースだとは思わない。

代わりに方法overloadingに行ってください。 overloadingを無効にする必要はありません。

関連する問題