• ベストアンサー

共変戻り値のメリット

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

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • 家計簿をつけるメリット

    家計簿管理の手法を自身の業務上のコスト管理に反映させられないものかと考え、勉強中のものです。 「家計簿をつけるメリット」について書かれた参考になる図書を、ご存知の方がいらしたら教えてください。 雑誌のようなものでもかまいませんが、主婦向けの雑誌を自分で参照したところ、節約の具体的な方法の紹介が多くて、「メリット」についての記述は見つけられずにいます。 宜しくお願いします。

  • XML のメリットは?

    XMLのメリットがよくわかりません。 過去の質問などをみていると、XMLにするとHTMLにくらべて テキストに意味が付加できて、構造化できるようですが、 具体的なメリットがイメージできません。 具体的にはどういう状況で使われるのでしょうか? 例えば、データ転送に使うことは CORBA なんかでできる訳ですし、 データとデザインを分けるということは、今までの HTML でも CGI や PHP を使ってできているわけですから、既存の技術でなんら問題ないと 思います。 他にもなんかメリットがあるのでしょうか? いや、XMLで面倒なことが多い割にメリットが感じられなくて、 勉強する気が起きないという、私のわがままなんですけどね、 この質問をした動機は。

    • ベストアンサー
    • HTML
  • メリット・メリットは?

    メリット・メリットは? クルマはある程度排気量でクラスの位置づけがなされていたと思うのですが、中にはその車のクラスより大きな排気量のエンジンを積んだグレードが有ったり、逆にその車のクラスより小さな排気量のエンジンを積んだグレードが有ったりしますが、それぞれのメリット・デメリットを挙げるとしたらどんなことがあるでしょうか? 例えば、カローラの1800cc、プレミオの1500cc。 ちょっと前だとマークIIの3000cc、クラウンの2000ccなど。

  • オブジェクト指向、クラスの有効利用方

    delphiを独学しています。 今までphpを勉強していたせいもあり、クラスやオブジェクト指向は知識としてはわかるのですが、うまい利用方法がわかりません。 具体的には、どうやって利用するのでしょうか? たとえば拡張ですが、 マウスで線を引くクラスを作ります。 それに色がつくように拡張させるのはわかります。 コアになるものを作って、ラッピングを変えることで見せ方を変えていくのはわかります。 しかし、そのコアになるもののパターンがわかりません。 もちろん、いろいろなパターンがあるとは思うのですが、最近見たクラスやオブジェクト指向で、わかりやすいものをあげてください。

  • C++ 共変 戻り値について

    c++ で例えば、 class A { public:  virtual ~A() {} }; class B { public:  virtual ~B() {}  virtual B& hoge() = 0; }; class D:  public A,  public B { public:  virtual D& hoge() // この戻り値でエラー  {   ...;   return *this;  } }; のようにコードを書いたとします。 そして、これを gcc 3.3 でコンパイルしたところ「ゴメン。共変はサポートしてないんだ」って感じでエラーとなってしまいました(gcc 3.2 では問題を孕んでたくせに、何も言わずにコンパイル通ってました)。 この共変の意味や、その実際の挙動、問題点等は判ったのですが、では一体、この様な場合にどのようにコードを修正するのが正しいのか思い至りません。 どなたか、私ならって言うお考えがあればご教示願えないでしょうか? ちなみに、コンパイラーを変えるってのは無しです^^) ## gcc 4.0 ならいけるのかな??

  • 衆議院を解散するメリットは何ですか?

    衆議院を解散する、しないというニュースをよく見ますが、 解散する、というのは具体的に何をすることですか? そして、衆議院を解散するメリットは何ですか? 誰にとって都合が良くなるのですか? 麻生総理には何が起こるのですか? 質問が多くて大変申し訳ありません。 政治について勉強不足なもので・・・ お恥ずかしいですが、良かったらよろしくお願い致します。

  • IE9の64ビットのメリット

    過去の書き込みを読みましたが、32ビットとの比較で、 64ビットのメリット(長所)、が何か、いまひとつわかりません。 機能が上だという表記はあるのですが、32ビットと64ビットのIEを WINDOWS7のプロ64ビットのPCで、比較して閲覧していますが、 64のほうが早いわかけではなく、ほとんど何の変わりもないと いうか、変化がよくわかりません。 そうなると、32ビットのほうが 汎用性が多いので、(対応しているサイトが多いので)、32ビットで 閲覧したほうがいいと思ってそうしていますが、64ビットで見れば、 こんな便利なことがあるよ、こんなにすごい機能があるよ、 これだけ早いよ、というような、具体的に体感できるようなメリットなどが あれば、教えていただければありがたいです。 よろしくおねがいします。

  • 拡張子を表示すると、どんなメリットがあるのか?

    こんにちは。 いろんなパソコン雑誌や、テキストに 拡張子を表示するやり方が載っているのを見かけますが、 結局、拡張子を表示するとどんなメリットがあるのでしょうか? 関連付けるという意味はわかるのですが、 だから、それがどのように活用できるのか、ピンときません。 むしろ、ファイル名変更のときには拡張子を消さないようにしないといけないし、 なんか、デメリットの方が多そうな気がするのですが… 実際はどうなんでしょうか。 とりとめない質問ですいませんが、 気になっています。 よろしくお願いいたします<(_ _)>

  • wmaとmp3それぞれのメリットとデメリットは?

    漠然とした質問で申し訳ないんですが、オーディオ形式のwmaおよびmp3のメリットおよびデメリットをどなたか説明していただけないでしょうか? 容量、音質、汎用性、などの観点から説明していただけると大変助かります。

  • 英語を介して第2外国語を学ぶメリット

    少し前に英語を介してロシア語を勉強してみたいという質問がありました。興味深く拝読しました。教材が日本向けに書かれているわけではないので理解しにくいなどの否定的な意見も多かったんですが、メリットも挙げられていました。ただ、その質問では具体例がありませんでした。そこで、英語を介して第2外国語を学習したことのある人に質問ですが、第2外国語を学習するのに英語を介したからこそ感じられたメリットの具体例をあげて頂くと助かります。 尚、否定的な意見の敷衍を趣旨とする回答はお見送り下さるようお願いします。