• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:static変数を持ったクラスを継承した複数のクラスで、独立してその変)

Javaクラスの継承で独立したstatic変数を使いたい

このQ&Aのポイント
  • Javaのクラス継承で、複数のクラスが独立してstatic変数を使用する方法について説明します。
  • 通常、親クラスのstatic変数は、子クラスすべてで共有されます。しかし、独立してstatic変数を持たせる方法はありません。
  • 複数のクラスで独立してstatic変数を使いたい場合は、各クラスに直接static変数を定義する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

> Ex1 e1 = new Ex1(); > ex1.str = "hoge"; インスタンスを経由してクラスのstatic変数を操作するのはお勧めできません。Eclipseでそういうコードを書くと警告が出ます。static変数なら、Ex1.str = "hoge";のように書きましょう。 それはさておき、独立したstatic変数を持たせたいのであればEx1とEx2でそれぞれ宣言するしかありません。

その他の回答 (1)

  • vaguechat
  • ベストアンサー率85% (47/55)
回答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