
static変数を持ったクラスを継承した複数のクラスで、独立してその変数を使いたい。
例えば、
class AbstractStatic{
public static String str;
}
class Ex1 extends AbstractStatic{}
class Ex2 extends AbstractStatic{}
というクラスがあったとして、
Ex1 e1 = new Ex1();
ex1.str = "hoge";
といれると、
ex2.str
で、hogeが入ってしまいます。同じようなstatic変数を持つクラスを複数作りたいのですが、継承させると、独立して変数を持たせられません。
同じようなクラスに直接static変数を、記述するしかないのでしょうか?
No.1ベストアンサー
- 回答日時:
> Ex1 e1 = new Ex1();
> ex1.str = "hoge";
インスタンスを経由してクラスのstatic変数を操作するのはお勧めできません。Eclipseでそういうコードを書くと警告が出ます。static変数なら、Ex1.str = "hoge";のように書きましょう。
それはさておき、独立したstatic変数を持たせたいのであればEx1とEx2でそれぞれ宣言するしかありません。
No.2
- 回答日時:
インスタンスの存在と無関係にクラス共通のフィールドを持たせて、
Ex1.str = "hoge";
Ex2.str = "moga";
のような書き方がしたい訳ではなく、
Ex1 ex1 = new Ex1();
ex1.str = "hoge";
のように常にインスタンスを介する使い方で、
同じクラスに属するどのインスタンスにも共通させたいが、
それぞれのクラスで宣言するのは面倒なので、
できればスーパークラスで処理を一元的に記述したいということなら、
直接フィールドにアクセスするやり方ではないが、
以下のようにスーパークラスにインスタンスメソッドのアクセッサを定義して、
Classクラスをキーにしてクラス変数のMapに格納しておく方法もある。
public abstract class AbstractStatic {
private static java.util.HashMap<Class, String> str = new java.util.HashMap<Class, String>();
public void setStr(String s) {
str.put(getClass(), s);
}
public String getStr() {
return str.get(getClass());
}
}
public class Ex1 extends AbstractStatic {
}
public class Ex2 extends AbstractStatic {
}
public class User {
public static void main(String[] args) {
AbstractStatic[] objects = {new Ex1(), new Ex1(), new Ex2()};
objects[0].setStr("hoge1");
objects[1].setStr("hoge2");
objects[2].setStr("moga");
for (AbstractStatic o : objects) System.out.println(o.getStr());
System.out.println(new Ex1().getStr());
System.out.println(new Ex2().getStr());
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java final 1 2022/06/10 22:49
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java リレーションエンティティクラスとは何ですか? 2 2023/02/10 00:02
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- 電車・路線・地下鉄 近鉄特急「スタンダードタイプ」と「ビスタEX」の違い。30000系の後継が22000系ですか? 1 2022/10/05 15:30
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- 経済学 資本移動や価格変動のない次のような固定為替レート・モデルを考える。 C = 10 + 0.8 Y I 3 2022/06/21 20:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラス間でのデータ参照
-
関数内の変数に<summary>コメン...
-
リフレクション
-
C#のクラスライブラリでメッセ...
-
継承したクラス側のクラス名の取得
-
javaでメインクラスが見つから...
-
プログラムの変数名にするとど...
-
C++で親クラスの関数を呼び出す...
-
C#にて別クラスの関数を使いたい
-
Java リフレクションについて
-
visual studioのデザイナ画面で...
-
構造 他のクラスの構造体を別...
-
範囲外の数値を代入したらエラ...
-
(クラス名.this.メソッド)って...
-
「タイプ初期化子が例外をスロ...
-
レコード件数の表示
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
private static という変数の修飾
-
どこからも呼ばれていない無意...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
範囲外の数値を代入したらエラ...
-
関数内の変数に<summary>コメン...
-
C#にて別クラスの関数を使いたい
-
c++,ある関数のクラスから別の...
-
構造 他のクラスの構造体を別...
-
C#でほかのファイルにある自作...
-
C++でfriendクラスにしているの...
-
import と extends について
-
Java リフレクションについて
-
無名パッケージからのインポート
-
visual studioのデザイナ画面で...
-
ひとつのファイルにクラスは1つ?
-
違うクラスからの変数の共有化
-
C#のクラスライブラリでメッセ...
-
継承したクラス側のクラス名の取得
-
Java
-
java-別クラスの変数の使い方を...
-
C# インターフェイスの実装
-
デシリアライズでオブジェクト...
おすすめ情報