プロが教えるわが家の防犯対策術!

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

A 回答 (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 の方がいいと思う.
    • good
    • 0

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

この回答への補足

ご回答有難うございます。
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メソッド
を呼び出せているので、メリットを感じません。(機能として
設けられているので使う場面によってはもちろんメリットはあると
思っていますがそれがどのような場面なのかわかりません。)

補足日時:2009/03/27 09:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!