1. ホーム
  2. java

[解決済み] 共変量戻り値型とは何ですか?

2022-10-06 18:55:02

質問

Javaにおけるcovariant return typeとは何ですか? 一般的なオブジェクト指向プログラミングでは?

どのように解決するのですか?

Covariant returnとは、あるメソッドをオーバーライドするときに、オーバーライドするメソッドの戻り値の型がオーバーライドするメソッドの戻り値の型のサブタイプであることが許されることを意味します。

例でこれを明確にするために、よくあるケースとして Object.clone() - という型を返すと宣言されているものです。 Object . これを自分のクラスでオーバーライドすると、次のようになります。

public class MyFoo
{

   ...

   // Note covariant return here, method does not just return Object
   public MyFoo clone()
   {
       // Implementation
   }
}

ここでの利点は、MyFoo オブジェクトへの明示的な参照を持つどのメソッドも、MyFoo オブジェクトを呼び出すことができるようになることです。 clone() のインスタンスであることを (キャストすることなく) 知ることができます。 MyFoo . 共変量戻り値型がない場合、MyFoo のオーバーライドされたメソッドが返すのは Object - を返すと宣言しなければならないので、呼び出し側のコードはメソッド呼び出しの結果を明示的にダウンキャストしなければなりません (たとえ両者が MyFoo のインスタンスにしかならないことを知っていてもです)。

には何も特別なものはないことに注意してください。 clone() について特別なことはなく、オーバーライドされたメソッドはすべて共変の戻り値を持つことができます。これがしばしば役立つ標準的なメソッドであるため、ここではこれを例として使用しました。