A 回答 (2件)
- 最新から表示
- 回答順に表示
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 の方がいいと思う.
No.1
- 回答日時:
もうちょっと具体的な例で質問してください。
この回答への補足
ご回答有難うございます。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# C言語について。 5 2023/06/27 18:37
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- 数学 逆ラプラス変換について ラプラス変換表を用いて以下の関数を逆ラプラス変換したいのですが、ラプラス変換 7 2022/04/30 17:37
- イヤホン・ヘッドホン・補聴器 金メッキL型ステレオミニプラグヘッドホン をスマホに使おうと思ったら 刺さらず使用出来ませんでした 6 2022/06/12 12:07
- バイクローン・バイク保険 皆さん、おはようございます♪ バイクについてのご質問です。 時期バイク候補が、ホンダのCBR650R 1 2022/08/29 07:41
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SwingでgetContentPaneのエラー...
-
C#でほかのファイルにある自作...
-
範囲外の数値を代入したらエラ...
-
javaでメインクラスが見つから...
-
Javaでのジェネリクス型パラメ...
-
ひとつのファイルにクラスは1つ?
-
C#のクラスライブラリでメッセ...
-
構造 他のクラスの構造体を別...
-
親クラスから呼ぶ
-
クラス間でのデータ参照
-
java-別クラスの変数の使い方を...
-
C# インターフェイスの実装
-
クラスについての基本的な質問です
-
swingについて。
-
関数内の変数に<summary>コメン...
-
c++,ある関数のクラスから別の...
-
JTable ArrayList 表示されない
-
C++でfriendクラスにしているの...
-
ある特定の値(変数)を持たせ...
-
親クラスから子クラスへアクセス。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
C#にて別クラスの関数を使いたい
-
c++,ある関数のクラスから別の...
-
親クラスから子クラスへアクセス。
-
C#でほかのファイルにある自作...
-
クラス間でのデータ参照
-
構造 他のクラスの構造体を別...
-
範囲外の数値を代入したらエラ...
-
ひとつのファイルにクラスは1つ?
-
C++でfriendクラスにしているの...
-
Java リフレクションについて
-
継承したクラス側のクラス名の取得
-
C# インターフェイスの実装
-
java-別クラスの変数の使い方を...
-
C#のクラスライブラリでメッセ...
-
visual studioのデザイナ画面で...
-
C# log4netの使い方
-
a href="..." とServlet
-
アップキャスト、ダウンキャス...
-
オブジェクトのデータをもとにX...
おすすめ情報