親クラスから子クラスへアクセス。
お世話になります。
以下のプログラムについて考えています。
public class Main{
public static void main(String[] args) {
SubA subA = new SubA();
SubB subB = new SubB();
Super[] subs = {subA,subB};
subs[1].method();
subs[2].method();
}
}
class Super{
String str = "親";
public void method(){
System.out.println(str);
}
}
class SubA extends Super{
String str = "子A";
}
class SubB extends Super{
String str = "子B";
}
この場合、出力結果は当然
親
親
になります。
これを子クラスの str を表示するようにしたいのです。つまり
子A
子B
です。
ただし、子クラスで method() をオーバーライドしたり、super.str = "子A" のように親クラスを書きかえずにです。
子クラスが何百種類もある場合、全く同じmethod()を書く無駄や、変更があったときにそれを全てを修正しなければならないことを避けたいのです。
何か良案がありましたら、ぜひご教授ください。よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
Super#method()の
System.out.println(str);
を
try { System.out.println(getClass().getDeclaredField("str").get(this)); } catch (Exception e) { e.printStackTrace(); }
に。
このイメージです、ありがとうございます。
これはリフレクションというやつでしょうか・・・
まったく無知だったので機能にかなり衝撃を受けました。
勉強したいと思います、ありがとうございました。
No.1
- 回答日時:
とりあえず。
記載のソースの実行結果は例外で落ちますね。
本題。これではだめですか?
class Super {
//String str = "親";
public void method() {
//System.out.println(str);
System.out.println(getStr());
}
protected String getStr() {
return "親";
}
}
class SubA extends Super {
//String str = "子A";
@Override
protected String getStr() {
return "子A";
}
}
class SubB extends Super {
//String str = "子B";
@Override
protected String getStr() {
return "子B";
}
}
フィールドを定義しているならメソッドに変えてもそんなに手間は変わらないかなと。
エラーすみません、凡ミスでした;
うーん、手間はやはりかわらなそうですね。
しかし変更時に修正箇所を減らす点ではかなり有効だと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java final 1 2022/06/10 22:49
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java リレーションエンティティクラスとは何ですか? 2 2023/02/10 00:02
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#にて別クラスの関数を使いたい
-
c++,ある関数のクラスから別の...
-
C#のクラスライブラリでメッセ...
-
キャストについて教えてください
-
関数内の変数に<summary>コメン...
-
java-別クラスの変数の使い方を...
-
クラス間でのデータ参照
-
違うクラスからの変数の共有化
-
javaでメインクラスが見つから...
-
visual studioのデザイナ画面で...
-
クラスの関数をまとめて実行す...
-
Class内で他のClassの定義
-
Java
-
C,C++,C++/CLIの構造体とクラス
-
RPGの主人公、町人、敵キャラの...
-
import と extends について
-
super.paint(g)を呼び出す意...
-
親クラスから子クラスへアクセス。
-
C++でfriendクラスにしているの...
-
回答が分かりません。どなたか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
範囲外の数値を代入したらエラ...
-
関数内の変数に<summary>コメン...
-
c++,ある関数のクラスから別の...
-
C#にて別クラスの関数を使いたい
-
java-別クラスの変数の使い方を...
-
C++でfriendクラスにしているの...
-
a href="..." とServlet
-
親クラスから子クラスへアクセス。
-
構造 他のクラスの構造体を別...
-
Java リフレクションについて
-
import と extends について
-
C#でほかのファイルにある自作...
-
C#のクラスライブラリでメッセ...
-
Java
-
アップキャスト、ダウンキャス...
-
無名パッケージからのインポート
-
違うクラスからの変数の共有化
-
SwingでgetContentPaneのエラー...
-
ひとつのファイルにクラスは1つ?
おすすめ情報