問題タブ [early-binding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Javaでのバインディングとディスパッチの違いは何ですか?
関連する名前が多すぎます: Early Binding と Late Binding、Static と Dynamic Dispatch、Runtime と Compile-time Polymorphism など、違いがわかりません。
明確な説明を見つけましたが、それは正しいですか? JustinCを言い換えます。
バインディング:変数 (オブジェクト?) の型を決定しています。コンパイル時に行われる場合は、早期バインディングです。実行時に行われる場合は、遅延バインディングです。
ディスパッチ:メソッド呼び出しに一致するメソッドを決定しています。静的ディスパッチはコンパイル時にメソッドを計算しますが、動的ディスパッチは実行時にそれを行います。
Binding は、プリミティブ変数と参照変数をそれぞれプリミティブ値とオブジェクトに一致させていますか?
編集:これについてもっと読むことができるように、明確な参考資料を教えてください。
c++ - さまざまな種類のポリモーフィズムに関する問題
私がこれまでに学んだことから、ポリモーフィズムには、コンパイル時と実行時の 2 種類があります。コンパイル時には、ポリモーフィングされた関数または演算子はコンパイラによって解決されますが、実行時には実行時に解決されます。コンパイル時ポリモーフィズムの例には、関数と演算子のオーバーロードが含まれ、実行時ポリモーフィズムには、関数のオーバーライドと仮想関数が含まれます。また、アーリー バインディングやレイト バインディングのようなケースもありますが、後で説明します。次のコードを検討してください。
私がこれを行う場合:
結果は明らかです。
本当の問題は、基本クラスへのポインターを使用してこれらの関数を操作するときに始まります。
出力は次のようになります。
これはアーリー バインディングによるもので、コンパイラは、関数が処理するオブジェクトの型ではなく、関数を呼び出しているオブジェクトの型をチェックします。そして、明らかにそれはコンパイル時に行われます。基本クラスの関数定義でキーワードを使用するとvirtual
、処理するオブジェクトのタイプに基づいてランタイムの関数定義を保存する遅延バインディングが原因で、手間をかけずに上記を簡単に実行できます。これはランタイム ポリモーフィズムの例です。
時間がかかりすぎて申し訳ありません。私の質問は、これがランタイム ポリモーフィズムを達成できる唯一の方法ですか? また、関数のオーバーライドがランタイム ポリモーフィズムである場合、前の例 (つまり、アーリー バインディングを使用したもの) も関数のオーバーライドを行っているため、ランタイム ポリモーフィズムである必要があります。