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