この投稿では、static のコンテキストにおける メソッドのオーバーロード と メソッドのオーバーライド の概念に焦点を当て、static キーワードに関するこれまでの議論を拡張します。方法。また、 this キーワードと super キーワードが静的コンテキストでどのように動作するか (または動作しないか) についても説明します。
静的キーワードを初めて使用する場合は、まず静的変数と静的メソッドを確認すると役立つかもしれません。
この投稿では、静的コンテキストでの this と super の動作について触れているため、This Keyword と Super Keyword についても確認することをお勧めします。
この投稿の主なトピック:
静的メソッドのオーバーロード
静的メソッドがオーバーライドできないの理由
静的コンテキストでの this キーワードと super キーワードの使用
主要な概念を示す例
1. 静的メソッドのオーバーロード
Java では、オーバーロード により、同じ名前のメソッドが異なるパラメータ リストで存在することができます。静的メソッドは、インスタンス メソッドと同様にオーバーロードできます。ただし、オーバーロードはコンパイル時に発生することに注意してください。
コード例:
package keywords.static_keyword; public class StaticVariables { static int idStatic = 1; public StaticVariables(String name) { this.id = ++idStatic; this.name = name; } int id; String name; static void displayText() { System.out.println("DisplayText called. ID: " + idStatic); } // Overloaded static method with a parameter static void displayText(String name) { System.out.println("Overloaded DisplayText called. Name: " + name); } public static void main(String[] args) { StaticVariables.displayText(); StaticVariables.displayText("Static Overload Example"); } }
説明:
メソッドのオーバーロード:displayText メソッドは 2 つのバージョンでオーバーロードされます。1 つはパラメータなし、もう 1 つは String パラメータありです。
Java はコンパイル時中にパラメータ リストに基づいて 2 つのメソッドを区別できるため、これは 合法です。
2. 静的メソッドをオーバーライドできない理由
Java では静的メソッドのオーバーライドは許可されていません。静的メソッドはオブジェクト インスタンスではなくクラスにバインドされているため、メソッド オーバーライドの基礎であるランタイム ポリモーフィズムには参加しません。
ただし、静的変数は継承され、子クラスからアクセスまたは変更できます。
コード例:
package keywords.static_keyword; public class StaticVariables { static int idStatic = 1; public StaticVariables(String name) { this.id = ++idStatic; this.name = name; } int id; String name; static void displayText() { System.out.println("DisplayText called. ID: " + idStatic); } // Overloaded static method with a parameter static void displayText(String name) { System.out.println("Overloaded DisplayText called. Name: " + name); } public static void main(String[] args) { StaticVariables.displayText(); StaticVariables.displayText("Static Overload Example"); } }
説明:
- オーバーライドなし: コメントアウトされた @Override メソッドは、静的メソッドをオーバーライドしようとする試みを示しています。オーバーライドはインスタンス メソッドにのみ適用されるため、コンパイル時エラーが発生します。
- 静的変数の継承: 静的メソッドはオーバーライドできませんが、静的変数は継承され、子クラスでアクセスまたは変更できます。
- 静的メソッドの呼び出し: 静的メソッドは、クラス名を使用して呼び出すか、同じクラス内にある場合は直接呼び出す必要があります。
3. 静的コンテキストでの this キーワードと super キーワードの使用
- this Keyword: クラスの現在のインスタンスを参照します。静的メソッドはどのインスタンスでも動作しないため、これを静的コンテキストで使用するとコンパイル時エラーが発生します。
例:
package keywords.static_keyword; public class CannotOverrideStaticMethod extends StaticVariables { public CannotOverrideStaticMethod(String name) { super(name); } // Attempting to override the static method // This will cause a compile-time error /* @Override static void displayText() { System.out.println("Overridden DisplayText"); } */ @Override void display() { // Static variables are inherited from the parent class idStatic = 90; // Access and modify the parent's static variable System.out.println("ID: " + idStatic + ", Name: " + name); super.display(); // Call the parent class's non-static method } // Correct way to use static methods from the parent class static void displayText() { StaticVariables.displayText(); // Call the parent class static method } public static void main(String[] args) { displayText(); // Calls the static method defined in this class } }
- super Keyword: 同様に、super キーワードは親クラスのインスタンスを参照します。 静的メソッドはインスタンスではなくクラスに属しているため、静的コンテキストでは super も無効です.
例:
static void displayText() { // Cannot use 'this' in a static context this.display(); // --> Compile-time error }
追加説明:
- コンセプト 1: オーバーライドにより、インスタンスに依存する ランタイムポリモーフィズム が有効になります。静的メソッドはインスタンスに関連付けられていないため、オーバーライドできません。ただし、例に示すように、静的変数は継承され、子クラスでアクセスまたは変更できます。
- コンセプト 2: this と super はどちらも インスタンス を参照します。これは現在のオブジェクトのメンバーを指しますが、super は親オブジェクトのメンバーを指します。静的メソッドはどのインスタンスからも独立して動作するため、静的メソッドまたは静的ブロックでは this も super も使用できません。
4. 重要な概念のまとめ
- 静的メソッドはオーバーロード可能: 同じ名前でパラメーター リストが異なる複数の静的メソッドを定義できます。これはコンパイル時中に解決されます。
- 静的メソッドはオーバーライドできません: 静的メソッドはインスタンスではなくクラスに属するため、実行時ポリモーフィズムをサポートしません。
- 静的変数は継承されます: 親クラスの静的変数は、子クラスでアクセスして変更できます。
- 静的コンテキストに this または super はありません: 静的メソッドはインスタンスで動作しないため、this キーワードと super キーワードは使用できません。
結論
この投稿では、静的メソッドのオーバーロードとオーバーライドの微妙な違いについて説明し、静的コンテキストで this と super を使用する際の制約について説明し、継承全体で静的変数がどのように動作するかを説明しました。これらの概念は、Java の静的メンバーとインスタンス メンバーがどのように異なるかを理解するために不可欠です。
関連記事
Java の基礎
アレイインタビューの要点
Java メモリの基礎
コレクション フレームワークの基本
コーディングを楽しんでください!
以上が静的キーワード: オーバーロード、オーバーライド、および this と super の役割の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

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

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

この記事では、分散アプリケーションを構築するためのJavaのリモートメソッドの呼び出し(RMI)について説明します。 インターフェイスの定義、実装、レジストリのセットアップ、およびクライアント側の呼び出しを詳述し、ネットワークの問題やセキュリティなどの課題に対処します。

この記事では、ネットワーク通信のためのJavaのソケットAPI、クライアントサーバーのセットアップ、データ処理、リソース管理、エラー処理、セキュリティなどの重要な考慮事項をカバーしています。 また、パフォーマンスの最適化手法も調査します

この記事では、カスタムJavaネットワーキングプロトコルの作成を詳述しています。 プロトコルの定義(データ構造、フレーミング、エラー処理、バージョン化)、実装(ソケットを使用)、データシリアル化、およびベストプラクティス(効率、セキュリティ、メンテナ


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!
