• ベストアンサー

共変戻り値のメリット

質問1:メリットって何ですか? 質問2:私が勉強に用いてる参考書では『クラスの拡張が安易になり、汎用的に利用できるようになる』とありましたが、わかりません。これは具体的にはどういうことでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

質問1ですが、 Object.clone() で考えると分かりやすいかと。 下記の例では、Dateクラスは古くから有るクラスのため、clone() の戻り値が Object 型になっています。その為、呼び出し側でわざわざダウンキャストしてやる必要が有ります。(まあクローンをObject型として扱う場合は必要有りませんが) 一方、ArrayDequeの方は1.6で導入されたので、clone() の戻り値が ArrayDeque 型になっています。その為、呼び出し側でのダウンキャストは必要有りません。 例) ------------------------------------ Date date = new Date(); // 1.0 の頃からあるクラス Date dateClone = (Date) date.clone(); // ダウンキャストが必要 ArrayDeque<?> deque = new ArrayDeque<Object>(); // 1.6 で追加されたクラス ArrayDeque<?> dequeClone = deque.clone(); // キャストは不要 ----------------------------------------

参考URL:
http://www.ne.jp/asahi/hishidama/home/tech/java/covariant.html
wantanton
質問者

お礼

丁寧なご回答誠にありがとうございます^^ すっきり理解できました^^

関連するQ&A

専門家に質問してみよう