• 締切済み

クラス型変数の型変換について。

初歩的な質問ですいません。クラス型変数を型変換して使うメリットはなんでしょう。どのような時に使えばいいんでしょうか。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「1つのスーパークラスから複数のサブクラスを extends してる」ときに, 「スーパークラスのオブジェクト」として扱えば「そのサブクラスのオブジェクトであるかを意識しないですむ」というメリットがあります. いわゆる「ポリモルフィズム」ってやつ. 自分ではよく使うたとえなんだけど, ドロー系のツールを考えたときに, 「図形」を表すスーパークラスを作っておき (普通は abstract もつける), 図形に対する操作はスーパークラスで定義しておく. で, 実際に描いたりする図形をその種類ごとに「図形」クラスのサブクラスにする. そうすると, (特有の操作はしょうがないけど) 図形に対する一般的な操作は「どの図形なのか」を意識せず, 単に「図形」として扱えばいいからプログラマの負担が減ります. こういうときにメリットが出る. そう考えると, そこに挙がってる例は百歩譲ってもあんまりよくないと思う. サブクラスは 1つしかないし, スーパークラスのメソッドをサブクラスで定義しなおしてもいない. これじゃぁメリットなんかわからないよなぁ. 例えば class SubstituteSub2SupDemo { static void show(Oya obj) { System.out.println(obj.msg()); } public static void main(String[] args) { Ko1 objKo1=new Ko1(); System.out.println("Ko1:"); show(objKo1); Ko2 objKo2=new Ko2(); System.out.println("Ko2:"); show(objKo2); } } class Oya { String msg() { return "Message from Oya."; } } class Ko1 extends Oya { String msg() { return "Message from Ko1."; } } class Ko2 extends Oya { String msg() { return "Message from Ko2."; } } くらいのプログラムを出した上で「じゃあメソッド show を見てみましょう」ってやらないと. でもこれ, クラスの名前もおかしい気がする. substitute は replace と同じような意味になるから, やってる内容とマッチしない感じがする. 代入と考えれば assign だけど, 実際には「変換」だから convert の方がいいと思う.

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

もうちょっと具体的な例で質問してください。

nipo888
質問者

補足

ご回答有難うございます。 class SubstituteSub2SupDemo { public static void main(String[] args) { //サブクラスのインスタンス化 Ko objKo=new Ko(); //スーパークラス型変数へサブクラス型変数の代入 Oya objOya = objKo; System.out.println("msgOya()"); System.out.println("objOya: " + objOya.msgOya()); System.out.println(" objKo: " + objKo.msgOya()); System.out.println("msgKo()"); // System.out.println("objOya: " + objOya.msgKo()); System.out.println(" objKo: " + objKo.msgKo()); } } class Oya { String msgOya() { return "Message from Oya."; } } class Ko extends Oya { String msgKo() { return "Message from Ko."; } } あるサイトの例文ですが、ここではKoクラスをOyaクラスに代入して KoクラスからOyaクラスのメソッドを呼び出していますが、 そうするメリットはなんでしょうか。OyaクラスからmsgOyaメソッド を呼び出せているので、メリットを感じません。(機能として 設けられているので使う場面によってはもちろんメリットはあると 思っていますがそれがどのような場面なのかわかりません。)

関連するQ&A