Javaプログラムの実行には、コンパイルと実行(解釈)、Javaはオブジェクト指向のプログラミング言語です。サブクラスと親クラスが同じ方法を持っている場合、サブクラスは親クラスの方法をオーバーライドします。プログラムが実行時にメソッドを呼び出す場合、親クラスのメソッドが呼び出されるか、サブクラスがオーバーライドされているかどうかにかかわらず、これはJavaを学び始めたときに遭遇する問題になるはずです。ここでは、最初に、この呼び出しを決定するための操作を実装または可変操作を決定する方法を決定します。
Javaには2つの結合方法があります。1つは静的結合で、初期結合とも呼ばれます。別のタイプは、後期結合とも呼ばれる動的結合です。
プログラムバインディングの概念:
バインディングとは、メソッドが配置されているクラス(メソッド本体)とメソッドコールとの関連付けを指します。 Javaの場合、結合は静的結合と動的結合に分割されます。または、それは早期結合と遅い結合と呼ばれます。
静的バインディング(早期結合コンパイラバインディング):
この方法は、プログラムが実行される前にバインドされており、コンパイラまたはその他の接続プログラムによって実装されます。例:C。Javaの場合、プログラムの編集期間中に拘束力があると理解できます。具体的には、Javaの唯一の方法は、事前に拘束力のある最終、静的、プライベート、およびコンストラクターです
動的結合(ランタイム中の遅いバインディング):
後で結合:実行時に特定のオブジェクトのタイプに応じてバインドします。
言語が遅い結合を実装する場合、操作中にオブジェクトのタイプを決定し、適切な方法を個別に呼び出すために、いくつかのメカニズムを提供する必要があります。言い換えれば、コンパイラはまだ現時点ではオブジェクトタイプを知りませんが、メソッド呼び出しメカニズムはそれを単独で調査し、正しいメソッド本体を見つけることができます。言語が異なると、遅延バインディングを実装する方法が異なります。それらはすべて、特定の特別な種類の情報をオブジェクトに挿入する必要があると考えることができます。
動的結合プロセス:
バインディングに関する要約:
3つの概念を理解した後、Javaは遅い拘束に属していることがわかりました。 Javaでは、ほとんどすべての方法が遅れた拘束力があり、動的に結合する方法は実行時にサブクラスまたは基本クラスです。しかし、特別な機能もあります。静的方法と最終的な方法は継承できないため、コンパイル時に値を決定できます。彼らは初期の拘束に属します。特に指摘するために、プライベートによって宣言された方法とメンバー変数はサブクラスによって継承することはできず、すべてのプライベートメソッドは最終として暗黙的に指定されています(これから、最終タイプとして宣言された方法は、メソッドが上書きされないようにし、Javaでの動的結合を効果的に閉じることであることがわかっています)。 Javaの拘束後の拘束力はJVMによって実装されています。明示的に宣言する必要はありませんが、C ++は異なります。メソッドに拘束後の方法があることを明示的に宣言する必要があります。 Javaの上向きの変換または多型は、動的結合によって達成されるため、動的結合を理解することは上向きの形質転換と多型を意味します。
Javaの方法の場合、初期の結合である最終、静的、プライベート、およびコンストラクターを除き、他のすべての方法は動的結合です。典型的な動的結合は、親クラスと子クラスの変換宣言の下で発生します。
例:親p = new Children();
特定のプロセスは次のとおりです。
1.コンパイラは、オブジェクトの宣言タイプとメソッド名をチェックします。 XF(args)メソッドを呼び出し、xがクラスCのオブジェクトとして宣言されているとし、コンパイラはクラスCのFとクラスCのスーパークラスから継承されたメソッドの名前のすべてのメソッドをリストします。
2。次に、コンパイラはメソッド呼び出しで提供されるパラメータータイプをチェックします。名前Fを使用してすべてのメソッドの1つのパラメータータイプが、コールが最も多く提供されているパラメータータイプと一致する場合、このメソッドは呼び出されます。このプロセスは「過負荷解析」と呼ばれます
3.プログラムが動的バインディングを実行して呼び出しメソッドを使用する場合、仮想マシンは、xが指すオブジェクトの実際のタイプに一致するメソッドバージョンを呼び出す必要があります。実際のタイプがd(cのサブクラス)であると仮定すると、クラスDがf(string)を定義する場合、メソッドが呼び出されます。そうしないと、メソッドf(string)はdのスーパークラスなどで検索されます。
質問の考え:
メソッドユーザーにタスクを完了するメソッドを提供する方法。ユーザーに特別な要件がある場合、彼または彼女は自分の方法をカスタマイズする必要がありますか?
関係する知識:
子育てのクラス、インターフェイス、上向き変換、動的結合
特定のコード:
パッケージcom.chengxuyuanzhilu; public interface myinterfaces {void doting();} package com.chengxuyuanzhilu; public class drinkはmyinterfaces {@override public void doting(){system.out.println( "I'm dinting water"); }}パッケージcom.chengxuyuanzhilu; public class eat my interfaces {@override public void doting(){system.out.println( "I'm Eating"); }}パッケージcom.chengxuyuanzhilu; public class run myinterfaces {@override public void doting(){system.out.println( "I'm Running"); }}パッケージ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(); }}上記はこの記事に関するものです。すべての人の学習に役立つことを願っています。