Java クラス変数オーバーライドの難問
次の Java コード スニペットを考えてみましょう:
<br>classお父さん{<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 {<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 サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版
便利なJavaScript開発ツール
