ホームページ >Java >&#&チュートリアル >Java でクラス変数をオーバーライドできますか?

Java でクラス変数をオーバーライドできますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-02 12:24:12787ブラウズ

Can Class Variables Be Overridden in Java?

Java でのクラス変数のオーバーライド: 誤解

Java では、クラス変数をオーバーライドできません。代わりに、オーバーライドされた変数のように見えるものは、実際には隠し変数です。この概念を明確にするために、例を検討します。

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(); // Prints "dad"
}

ここで、関数 doIt は "dad" を出力します。これは、Son のクラス変数 me が、継承された me を Dad から隠すだけであるためです。

オーバーライドと非表示の主な違いは、オーバーライドでは親メソッドの実装が子メソッドの実装で置き換えられるのに対し、非表示では単純に子から親メンバーにアクセスできなくなることです。 class.

したがって、クラス変数をオーバーライドする適切な方法はありません。代わりに、指定された例で "son" を出力するには、コンストラクターを変更するか、

public class Son extends Dad {
    private String me;

    public Son(String me) {
        this.me = me;
    }

    @Override
    public void printMe() {
        System.out.println(me);
    }
}
のようにメソッドに name パラメーターを渡す必要があります。

以上がJava でクラス変数をオーバーライドできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。