- ベストアンサー
Javaクラスの継承で独立したstatic変数を使いたい
- Javaのクラス継承で、複数のクラスが独立してstatic変数を使用する方法について説明します。
- 通常、親クラスのstatic変数は、子クラスすべてで共有されます。しかし、独立してstatic変数を持たせる方法はありません。
- 複数のクラスで独立してstatic変数を使いたい場合は、各クラスに直接static変数を定義する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> Ex1 e1 = new Ex1(); > ex1.str = "hoge"; インスタンスを経由してクラスのstatic変数を操作するのはお勧めできません。Eclipseでそういうコードを書くと警告が出ます。static変数なら、Ex1.str = "hoge";のように書きましょう。 それはさておき、独立したstatic変数を持たせたいのであればEx1とEx2でそれぞれ宣言するしかありません。
その他の回答 (1)
- vaguechat
- ベストアンサー率85% (47/55)
インスタンスの存在と無関係にクラス共通のフィールドを持たせて、 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()); } }