Java プログラムの実行には、コンパイルと実行 (解釈) の 2 つのステップが必要です。同時に、Java はオブジェクト指向プログラミング言語です。サブクラスと親クラスが同じメソッドを持ち、サブクラスが親クラスのメソッドをオーバーライドする場合、プログラムが実行時にメソッドを呼び出すとき、親クラスのメソッドを呼び出す必要がありますか、それともサブクラスのオーバーライドされたメソッドを呼び出す必要がありますか? Java を初めて学習するときに遭遇する問題は次のとおりです。ここではまず、どのメソッドを呼び出すか、または変数の操作をバインディングと呼ぶかを決定します。
Java には 2 つのバインディング メソッドがあり、1 つは静的バインディングであり、早期バインディングとも呼ばれます。もう 1 つは動的バインディングであり、遅延バインディングとも呼ばれます。
プログラム バインディングの概念:
バインディングは、メソッド呼び出しと、そのメソッドが配置されているクラス (メソッド本体) との関連付けを指します。 Java の場合、バインディングは静的バインディングと動的バインディング、または早期バインディングと遅延バインディングに分けられます。他のリンカー。例: C. Java の場合、プログラムのコンパイル中のバインディングとして理解できます。特に、Java の Final、static、private、およびコンストラクター メソッドのみが早期バインディングです
動的バインディング (遅延バインディング ランタイム バインディング):
遅延バインディング:実行時の特定のオブジェクトのタイプ。
言語が遅延バインディングを実装する場合、実行時にオブジェクトの型を決定し、それぞれ適切なメソッドを呼び出す何らかのメカニズムも提供する必要があります。つまり、この時点ではコンパイラはまだオブジェクトの型を認識していませんが、メソッド呼び出しメカニズムはそれ自体で調査して、正しいメソッド本体を見つけることができます。言語が異なれば遅延バインディングの実装方法も異なります。次のように考えてください。それらはすべて、何らかの特別な種類の情報をオブジェクトに挿入する必要があります。
動的バインディングのプロセス:
仮想マシンはオブジェクトの実際の型のメソッドテーブルを抽出します
仮想マシンはメソッドシグネチャを検索します
メソッドを呼び出します
バインディング関連の概要:
理解した後3 つの概念を検討した結果、Java は遅延バインディングに属することがわかりました。 Java では、ほとんどすべてのメソッドが実行時に動的にバインドされるメソッドはサブクラスまたは基本クラスに属します。ただし、静的メソッドと最終メソッドは継承できないため、コンパイル時に値が決定される特殊なメソッドもあります。特に注意すべき点は、プライベートに宣言されたメソッドとメンバー変数はサブクラスに継承できないことです。すべてのプライベート メソッドは暗黙的に Final として指定されます (このことから、メソッドを Final 型として宣言することは、メソッドが上書きされるのを防ぐためであることがわかります)。 Java で動的バインディングを効果的に無効にすることです)。 Java の遅延バインディングは JVM によって実装されます。明示的に宣言する必要はありませんが、C++ ではメソッドが遅延バインディングを持つことを明示的に宣言する必要があります。 Java のアップキャストまたはポリモーフィズムは動的バインディングを利用して実現されるため、動的バインディングを理解することはアップキャストとポリモーフィズムも意味します。
Java のメソッドの場合、事前にバインドされている Final、static、private、およびコンストラクター メソッドを除き、他のすべてのメソッドは動的にバインドされます。動的バインディングは通常、親クラスとサブクラスの変換宣言の下で発生します:
例: Parent p = new Children();
具体的なプロセスは次のとおりです:
1. コンパイラは、宣言された型とメソッドをチェックします。オブジェクト名。 x.f(args) メソッドを呼び出し、x がクラス C のオブジェクトとして宣言されているとします。その場合、コンパイラーはクラス C 内の f という名前のすべてのメソッドと、クラス C
2 のスーパークラスから継承された f メソッドを列挙します。次に、コンパイラはメソッド呼び出しで提供されたパラメータの型をチェックします。 f という名前のすべてのメソッドの中に、呼び出しで指定されたパラメーターの型に最も一致するパラメーターの型がある場合、このメソッドは、プログラムの実行時に「オーバーロード解決」と呼ばれます
3。が動的バインディングを使用して呼び出される場合、仮想マシンは、x が指すオブジェクトの実際の型と一致するバージョンのメソッドを呼び出す必要があります。実際の型が D (C のサブクラス) であると仮定します。クラス D が f (String) を定義している場合、メソッドが呼び出されます。それ以外の場合は、メソッド f (String) が D のスーパークラスで検索されます。
問題について考える:
タスクを完了するためのメソッドをメソッドユーザーに提供する方法。ユーザーに特別な要件があり、独自の方法をカスタマイズできる場合はどうすればよいでしょうか?
関連する知識:
子クラスと親クラス、インターフェイス、上向き変換、動的バインディング
具体的なコード:
package com.chengxuyuanzhilu; public interface MyInterfaces { void doting(); } package com.chengxuyuanzhilu; public class Drink implements MyInterfaces { @Override public void doting() { System.out.println("我在喝水"); } } package com.chengxuyuanzhilu; public class Eat implements MyInterfaces { @Override public void doting() { System.out.println("我在吃东西"); } } package com.chengxuyuanzhilu; public class Run implements MyInterfaces { @Override public void doting() { System.out.println("我在奔跑"); } } package com.chengxuyuanzhilu; public class TestDynamicBind { public static void main(String[] args) { MyInterfaces my = null; my = new Eat(); bind(my); my = new Drink(); bind(my); my = new Run(); bind(my); } static void bind(MyInterfaces my){ my.doting(); } }
以上がこの記事の全内容です、皆様の学習にお役に立てれば幸いです。
Java の静的バインディングと動的バインディングの理解に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

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

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

この記事では、Lambda式、Streams API、メソッド参照、およびオプションを使用して、機能プログラミングをJavaに統合することを調べます。 それは、簡潔さと不変性を通じてコードの読みやすさと保守性の改善などの利点を強調しています

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

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

この記事では、単一のスレッドで複数の接続を効率的に処理するためにセレクターとチャネルを使用して、非ブロッキングI/O用のJavaのNIO APIについて説明します。 プロセス、利点(スケーラビリティ、パフォーマンス)、および潜在的な落とし穴(複雑さ、

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

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

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック



