1. ホーム
  2. java

[解決済み] Javaでクラス変数をオーバーライドする方法はありますか?

2022-04-22 23:16:08

質問

class Dad
{
    protected static String me = "dad";

    public void printMe()
    {
        System.out.println(me);
    }
}

class Son extends Dad
{
    protected static String me = "son";
}

public void doIt()
{
    new Son().printMe();
}

関数doItは"dad"を表示します。これを "son" と表示させる方法はありますか?

どのように解決するのですか?

しかし、変数に関わることなので、上書きされます(変数に新しい値を与えること。関数に新しい定義を与えることはOverrideです)。変数の宣言はせず、コンストラクタやスタティックブロックで初期化(変更)すればよいのです。

親クラスのブロックで使用すると、その値が反映されます。

もし変数がstaticであれば、staticブロックを使って初期化時に値を変更します。

class Son extends Dad {
    static { 
       me = "son"; 
    }
}

またはコンストラクタで変更します。

また、どのブロックでも後で値を変更することができます。スーパークラスに反映されます。