ホームページ > Java > &#&チュートリアル > Java の静的変数の継承により予期しない結果が生じるのはなぜですか?

Java の静的変数の継承により予期しない結果が生じるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-01 19:10:12
オリジナル
752 人が閲覧しました

Why Does Java's Static Variable Inheritance Produce Unexpected Results?

Java クラス変数オーバーライドの難問

次の Java コード スニペットを考えてみましょう:

<br>classお父さん{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">protected static String me = "dad";

public void printMe() {
    System.out.println(me);
}
ログイン後にコピー

}

クラス 息子がお父さんを拡張 {

protected static String me = "son";
ログイン後にコピー

}

public void doIt() {

new Son().printMe();
ログイン後にコピー

}

このコードは、「Dad」クラスと「Son」クラスの両方で「me」という名前のクラス変数を定義しているようです。 「doIt()」を呼び出すと、「Son」は「Dad」のサブクラスであるため、コードが「son」を出力することを期待するかもしれません。しかし、これは起こりません。

なぜ "doIt()" は "dad" を出力するのですか?

Java では、クラス変数をオーバーライドできません。代わりに、それらは隠されます。具体的には、サブクラス内で既存の名前を持つクラス変数を宣言すると、サブクラスは継承されたクラス変数を非表示にし、同じ名前で親クラスとは異なる新しいクラス変数を事実上作成します。

オーバーライドvs. 非表示

オーバーライドには、スーパークラスのメソッドをオーバーライドするサブクラスのメソッドに別の実装を提供することが含まれます。対照的に、非表示では、サブクラスで同じ変数名を使用しますが、スーパークラスから継承した変数を非表示にし、サブクラスに対してローカルな新しい変数を作成します。

「son」を出力する方法?

「son」を出力するという望ましい動作を実現するには、クラス変数をオーバーライドすることはできません。代わりに、次のような他の継承手法を使用できます。

  • サブクラスで別の変数名を使用する (例: "me" の代わりに "myName")。
  • 継承されたクラスを変更するリフレクションを使用した変数 (この方法は一般的な使用には推奨されません)。
  • 例に示すように、コンストラクターの引数として値を渡します。以下:

コンストラクター引数を使用した例:

<br>public class person {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">private String name;

public Person(String name) {
    this.name = name;
}

public void printName() {
    System.out.println(name);
}
ログイン後にコピー

}

この例では、クラス「person」に名前を設定するコンストラクターがあります。これにより、「人」のサブクラスを作成し、名前に特定の値を渡すことができます。

以上がJava の静的変数の継承により予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:Java でカンマ区切りの文字列をリストに簡単に変換するにはどうすればよいですか? 次の記事:Java アノテーションに定数から値を動的に割り当てることはできますか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート